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

Oracle SQL Developer:如何使用PIVOT函数将行转置为列

董俊晖
2023-03-14
问题内容

我正在尝试创建一个查询,以使用PIVOT函数将行转置为列。

这是contact我要转置为行的表:

   PARTYID CONTACTTEXT  CONTACTTYPECD
---------- ------------ -------------
       100 0354441010               1
       100 0355551010               2
       100 0428105789               3
       100 abc@home.com             4

我的预期结果:

   PARTYID PHONE        FAX          MOBILE       EMAIL      
---------- ------------ ------------ ------------ ------------
       100 0354441010   0355551010   0428105789   abc@home.com

我的查询:

SELECT * FROM 
  ( 
    SELECT partyId, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyId = 100; 
  ) 
  PIVOT ( 
    MAX(contacttext) 
  FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email));

我遇到的错误:

Error starting at line 9 in command: 
FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email)) 
Error report: 
Unknown Command

我出现问题的原因是因为我的Oracle数据库版本(Oracle9i)不支持PIVOT功能。以下是以另一种方式进行操作的方法:

SELECT PartyCD
  ,MAX(DECODE(t.contacttypecd, 1, t.contacttext)) Phone
  ,MAX(DECODE(t.contacttypecd, 2, t.contacttext)) Fax
  ,MAX(DECODE(t.contacttypecd, 3, t.contacttext)) Mobile
  ,MAX(DECODE(t.contacttypecd, 4, t.contacttext)) Email
FROM 
  (
    SELECT partyid, contacttext, contacttypecd
    FROM CONTACT
    WHERE partyid = 100
  ) t
 GROUP BY PartyID

问题答案:

在以下情况中,您的陈述中有一个冒号的分号:

    WHERE partyId = 100;

将其删除以使其成为:

SELECT * FROM 
  ( 
    SELECT partyId, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyId = 100
  ) 
  PIVOT ( 
    MAX(contacttext) 
  FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email));

   PARTYID PHONE        FAX          MOBILE       EMAIL      
---------- ------------ ------------ ------------ ------------
       100 0354441010   0355551010   0428105789   abc@home.com

它被视为多个语句;第一个是不完整的,因为它缺少右括号(因此得到ORA-00907),第二个从该括号开始并得到了您报告的错误,然后每行都得到相同的错误。您似乎只是在查看上一次报告的错误-
从第一个错误开始,将其清除,然后继续存在下一个错误,通常会更有帮助。



 类似资料:
  • 我已经读过关于MS透视表的东西,但我仍然有问题得到正确的这一点。 我有一个正在创建的临时表,我们会说第1列是一个商店号,第2列是一个星期号,最后第3列是某种类型的总数。而且周数是动态的,商店数是静态的。 我希望它作为一个透视表出来,像这样: 商店的数字下侧和周横跨顶部。

  • 问题内容: 编辑: 是否使用不在此问题的范围内。考虑使用PDO。 需要采取什么步骤将脚本从使用不赞成使用的功能转换为? 使用代替时,是否需要采取其他不同的措施? 这是使用函数的基本脚本: 问题答案: 注意: 从转换到可能不是最佳的。如果您准备将所有代码转换为OOP,请考虑使用 PDO 。 这是很有诱惑力的尝试更换的所有实例与祈祷它的工作原理。您会很亲密,但不是很准。 连接到数据库: 幸运的是,该方

  • 问题内容: 我正在尝试将表的某些列转置为行。我正在使用Python和Spark 1.5.0。这是我的初始表: 我想要这样的东西: 有人知道我能做到吗?感谢您的帮助。 问题答案: 使用基本的Spark SQL函数相对简单。 蟒蛇 Scala :

  • 问题内容: 这是我当前的mysql表的样子: 现在,我想返回基于星期几进行分组的结果集,如下所示: 这是我当前的查询。但它只返回每天的第一打。 有人可以帮我弄这个吗?谢谢迈克 问题答案: SQLFiddle演示 输出值

  • 问题内容: 我正在尝试将表的某些列转置为行。我正在使用Python和Spark 1.5.0。这是我的初始表: 我想要这样的东西: 有人知道我能做到吗?谢谢你的帮助。 问题答案: 使用基本的Spark SQL函数相对简单。 python Scala:

  • 本文向大家介绍如何使用COALESCE()函数将MySQL null转换为0?,包括了如何使用COALESCE()函数将MySQL null转换为0?的使用技巧和注意事项,需要的朋友参考一下 您可以使用该函数将MySQL null转换为0 让我们首先创建一个表。创建表的查询如下 使用insert命令在表中插入一些记录。 查询如下 使用select语句显示表中的所有记录。 查询如下 以下是输出 这是