programing

Oracle SQL 개발자:피봇 함수를 사용하여 행을 열로 변환하는 방법

cafebook 2023. 10. 30. 21:15
반응형

Oracle SQL 개발자:피봇 함수를 사용하여 행을 열로 변환하는 방법

피봇 함수를 사용하여 행을 열로 변환하는 쿼리를 생성하려고 합니다.

여기가.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 

문제가 발생한 이유는 오라클 데이터베이스 버전(Oracle9i)이 피봇(PIOT) 기능을 지원하지 않기 때문입니다.다음은 다른 방법으로 수행하는 방법입니다.

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을 가져옵니다). 두 번째 문장은 해당 괄호로 시작하여 보고한 오류를 얻으며, 이후 각 행은 동일한 오류를 얻습니다.마지막으로 보고된 오류만 보고 있는 것 같습니다. 일반적으로 첫 번째 오류로 시작하여 해당 오류를 지우고 계속 있는 경우 다음 오류로 이동하는 것이 훨씬 더 도움이 됩니다.

언급URL : https://stackoverflow.com/questions/29945504/oracle-sql-developer-how-to-transpose-rows-to-columns-using-pivot-function

반응형