[Postgresql] 여러 로우를 한 로우로 합치기(특이 조건) 0 2 784

by 손놀림 [2017.04.25 23:21:10]


안녕하세요. 여러 로우를 하나로 합치는 것에 대해 질문 드립니다.

좀 독특하게 합치려고 하는데

예를 들어 데이터가

id   type_id   master_id  table_id prim_key  column_nm          timestamp

1    DT0001    M0018    T0021    C0015    PRODUCT_ITEM    2017-04-25 21:40:38
2    DT0001    M0018    T0021    C0015    PRODUCT_CATEGORY    2017-04-25 21:40:51
3    DT0002    M0018    T0021    C0016    PRODUCT_ITEM  2017-04-25 21:40:51

이런  식으로 있을 때 원하는 형태는 아래와 같습니다.

id   type_id   master_id  table_id prim_key       column_nm                                      timestamp

1   DT0001     M0018    T0021    C0015     PRODUCT_ITEM, PRODUCT_CATEGORY     2017-04-25 21:40:382017-04-25 21:40:51

2   DT0002     M0018    T0021    C0025     PRODUCT_ITEM                                    2017-04-25 21:40:51

간단하게 설명 드리면

같은 type_id, master_id, table_id를 가졌을 때 column_nm과 timestamp가 다르다면 ","로 묶어서 한 개 raw로 합쳐서 표현하려고 하는 것입니다.

이게 고민을 많이 해봤는데 간단하게 보여도 쿼리로는 엄청나게 많은 작업이 있을 것 같습니다..

 

혹시 간단하게 묶을 수 있는 방법이 있을까요?

조언 부탁 드립니다. 감사합니다.

by ㅇㅇ준 [2017.04.26 09:53:06]

SELECT type_id

, master_id

, table_id

, prim_key

, ARRAY_TO_STRING(ARRAY_AGG(column_nm),',')

, ARRAY_TO_STRING(ARRAY_AGG(timestamp),',') 

FROM 테이블명

GROUP BY type_id, master_id, table_id, prim_key;

 

이렇게 해보시겠어요?


by 손놀림 [2017.04.26 10:32:20]


와 공영준님

알려주신대로 적용해 보니 원하는 형태대로 나오네요

정말 감사드립니다~

저도 인터넷 찾아 뒤지면서 ARRAY_TO_STRING(ARRAY_AGG()) 구문을 찾아가지고 사용해봤는데

사용 방법을 몰라서인지 해결하지 못했었습니다.

ARRAY_TO_STRING(ARRAY_AGG())가 동작하는 과정을 한 번 찾아봐야겠네요

다시 한 번 정말 감사 드립니다~

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