Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL开发人员:如何使用PIVOT函数将行转换为列_Sql_Oracle_Pivot_Oracle9i - Fatal编程技术网

Oracle SQL开发人员:如何使用PIVOT函数将行转换为列

Oracle SQL开发人员:如何使用PIVOT函数将行转换为列,sql,oracle,pivot,oracle9i,Sql,Oracle,Pivot,Oracle9i,我试图创建一个查询,使用PIVOT函数将行转换为列 这是我要转换成行的联系人表: PARTYID CONTACTTEXT CONTACTTYPECD ---------- ------------ ------------- 100 0354441010 1 100 0355551010 2 100 0428105789 3 100 abc@home

我试图创建一个查询,使用PIVOT函数将行转换为列

这是我要转换成行的
联系人
表:

   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),第二个是从该括号开始的,并获取您报告的错误,然后每个后续行都获取相同的错误。您似乎只是在查看上次报告的错误-通常从第一个错误开始,清除该错误,然后转到下一个错误(如果它仍然存在)。

我删除了party=100行后面的分号,现在出现以下错误:
ORA-00933:SQL命令未正确结束
00933。00000-“SQL命令未正确结束”
*原因:
*操作:
第7行错误列:8
找到问题的原因:我的oracle数据库版本是Oracle9i,不支持PIVOT功能。是的