pgsql crosstab 사용법좀요 0 1 2,040

by dfdfdf [SQL Query] pgsql [2017.04.17 11:18:25]


crosstab 쿼리를 짤려고하는데  해당 함수에 대한 이해도가 너무 작기도 하고  쿼리 경험도 많이 부족해서  도저히 안짜지네요 찾아봣는데  해당 상황과는 약간 다른 경우고요  dataset을  아래와 같이 바꾸고싶은데 잘안되네요... 
도와주세요 ..ㅠ.ㅠ 


이와 같은 데이타 set을 
----before dataset ---- 
ord_item_no  memo_text 
76417        ㄷㄷㄷ 
76417       ㄱㄱㄱ 
76417     ㄴㄴㄴ 
76417     ㄹㄹㄹ 

이렇게 바꾸고 싶습니다 

----after dataset ---- 
ord_item_no  memo_text1 memo_text2 memo_text3 memo_text4 memo_text5 memo_text6 memo_text10 

76417    ㄱㄱㄱ ㄴㄴㄴ     ㄷㄷㄷ ㅅㅅㅅ   ssss xxxx rrrr



 

// 그나마 엇비슷한 쿼리를 찾았는데 ... 저희쪽 데이타는 key 위치에 memotext인데 type형 고정 데이타가 아니라 메모 내용(즉 고정데이타가 아니라 가변적데이타)이여서 해당 쿼리에 해당은 안되는거 같더군요 ...

SELECT * FROM crosstab

( 'SELECT rowid, key, value FROM test WHERE key= ''key1'' OR key = ''key2'' OR key = ''key3'' OR key = ''key4'' ORDER BY 1,2') AS ct(rowid text, key1 text, key2 text, key3 text, key4 text);

 

by 마농 [2017.04.17 13:11:49]
SELECT ord_item_no
     , MIN(CASE rn WHEN 1 THEN memo_text END) memo_text_1
     , MIN(CASE rn WHEN 2 THEN memo_text END) memo_text_2
     , MIN(CASE rn WHEN 3 THEN memo_text END) memo_text_3
     , MIN(CASE rn WHEN 4 THEN memo_text END) memo_text_4
     , MIN(CASE rn WHEN 5 THEN memo_text END) memo_text_5
     , MIN(CASE rn WHEN 6 THEN memo_text END) memo_text_6
     , MIN(CASE rn WHEN 7 THEN memo_text END) memo_text_7
     , MIN(CASE rn WHEN 8 THEN memo_text END) memo_text_8
     , MIN(CASE rn WHEN 9 THEN memo_text END) memo_text_9
  FROM (SELECT ord_item_no, memo_text
             , ROW_NUMBER() OVER(PARTITION BY ord_item_no ORDER BY 정렬기준) rn
          FROM test
--         WHERE ord_item_no = 76417
        ) a
 GROUP BY ord_item_no
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입