我正在尝试创建一个查询,以使用PIVOT函数将行转置为列。
这是contact我要转置为行的表:
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),第二个从该括号开始并得到了您报告的错误,然后每行都得到相同的错误。您似乎只是在查看上一次报告的错误- 从第一个错误开始,将其清除,然后继续存在下一个错误,通常会更有帮助。