当前位置: 首页 > 面试题库 >

具有给定表数据的所需输出

卫俊誉
2023-03-14
问题内容

嗨,我有一个表测试,其结构如下:

**Testing**

  PK    C1    c2  
 ---------------
 1      v11  v12
 2      v21  v23
 3      v31  v32

现在,我需要查询该表(测试),以便获得以下输出。

 Pk  Key value 
---------------
 1    c1    v11
 1    c1    v12
 2    c2    v21
 2    c2    v22
 3    c3    v31
 3    c3    v32

Oracle 11g中的sql查询是否可以实现?11g中的PIVOT功能是否可以实现?


问题答案:

不,它不能用来完成PIVOT,但是 可以 用来完成**UN** PIVOT

SELECT
  Pk,
  "Key",
  value
FROM Testing
UNPIVOT (
  value FOR "Key" IN (C1, C2)
)

UNPIVOT不可用时,我通常会像这样取消透视:

SELECT
  t.Pk,
  x."Key",
  CASE x."Key"
    WHEN 'C1' THEN t.C1
    WHEN 'C2' THEN t.C2
  END AS value
FROM Testing t
CROSS JOIN (
  SELECT 'C1' AS "Key" FROM DUAL UNION ALL
  SELECT 'C2' FROM DUAL
) x


 类似资料:
  • 我试图在Python中声明一个动态列表,并对其进行各种操作,但在操作之后,它没有给出所需的输出。 当我像一样将列表声明为一般长度时,它工作得很好:

  • 问题内容: 我有3个表,每个表由称为用户名的列组成。在注册部分,我需要检查所请求的用户名是否是新的和唯一的。 在继续之前,我需要一个SQL来告诉我该用户是否存在于任何这些表中。我试过了: 那是路要走吗? 问题答案:

  • 问题内容: 我刚接触Oracle,想查找用户’john’创建的所有表。 我通过以下命令通过命令行连接到Oracle数据库: 如何列出给定用户(例如john)创建的所有表? 问题答案: 这将获得所有以“ JOHN”用户为所有者的表: 或者 ([TL; DR]通常需要使用大写。假设用户是使用该语句创建的,那么Oracle的默认行为是将所有对象名称(即表,列,用户等)都转换为大写。查询数据字典,在这种情

  • 问题内容: 如何仅列出具有给定前缀()的数据库? 例: 输出: 预期产量: 奖金: 在我的情况下,可以在不定义new 的情况下创建数据库吗? 我的目标是仅在具有前缀的数据库上运行查询,所以可能存在比列出数据库更好的解决方案,然后在每个数据库上运行查询吗? 问题答案: 只需按表示数据库名称的属性进行过滤。要列出以给定前缀开头的数据库,可以使用regexp为: 其他过滤器选项在命令页面上列出: 您可以

  • 问题内容: 在SQL Server中,是否有一条命令返回与给定表或视图有关系的所有表的列表? 编辑:SQL SERVER 2008 问题答案: 对于SQL Server 2005及更高版本,请使用类似以下内容的内容:

  • 问题内容: 如何使用查询获取SQL Server数据库中所有表的列表。我的意图是将其动态显示在网页上。 问题答案: 尝试: 这应该给您您想要的。然后,您需要从网页中调用它,以所需格式显示。 您可能要看: 如何使用C#在组合框中从数据库获取所有表的名称 可能会帮助您完成您想做的事情。 另外-您可能想看一下SQL Server:我应该在sys表上使用information_schema表吗? 用于sy