Oracle SQL 开发人员:如何使用 PIVOT 函数将行转置为列
Oracle SQL Developer: How to transpose rows to columns using PIVOT function
我正在尝试创建一个查询以使用 PIVOT 函数将行转置为列。
这是 contact
table 我想转置成行:
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),第二个以该括号开头并得到您报告的错误,然后每个后续行都会得到相同的错误。您似乎只查看上次报告的错误 - 从第一个错误开始通常会更有帮助,清除它,如果它仍然存在,然后继续下一个错误。
我正在尝试创建一个查询以使用 PIVOT 函数将行转置为列。
这是 contact
table 我想转置成行:
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),第二个以该括号开头并得到您报告的错误,然后每个后续行都会得到相同的错误。您似乎只查看上次报告的错误 - 从第一个错误开始通常会更有帮助,清除它,如果它仍然存在,然后继续下一个错误。