[英]Oracle SQL Developer: How to transpose rows to columns using PIVOT function
我正在嘗試創建一個查詢,使用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),第二個從括號開始並得到你報告的錯誤,然后每個后續行得到相同的錯誤。 您似乎只是在查看上次報告的錯誤 - 從第一個錯誤開始通常更有幫助,清除它,然后移動到下一個錯誤(如果它仍然存在)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.