PIVOT関数を使用して、行を列に転置するクエリを作成しようとしています。
これは、行に転置したいcontact
テーブルです:
PARTYID CONTACTTEXT CONTACTTYPECD
---------- ------------ -------------
100 0354441010 1
100 0355551010 2
100 0428105789 3
100 [email protected] 4
私の意図した結果:
PARTYID PHONE FAX MOBILE EMAIL
---------- ------------ ------------ ------------ ------------
100 0354441010 0355551010 0428105789 [email protected]
私のクエリ:
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 [email protected]
複数のステートメントとして見られています。最初の括弧は閉じ括弧がないため(ORA-00907を取得)、2番目はその括弧で始まり、報告されたエラーを取得し、その後の各行は同じエラーを取得します。あなたは最後に報告されたエラーだけを見ているようです-通常、最初のエラーから始めてそれをクリアし、それがまだ存在する場合は次のエラーに移動する方がはるかに便利です。