SEQ | NBA_CD | SOSOK | COMBO | SOSOK2 |
1 | ET1 | LAL | I | CLE |
2 | ET1 | LAL | I | BOS |
3 | ET1 | LAL | L | ATL |
4 | ET1 | LAL | L | CHA |
5 | ET1 | LAL | L | CHI |
6 | ET1 | LAL | R | DET |
TABLE명 : TB_NBA
원하는 쿼리 결과 값 : (((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) + CHI(L)) + DET(R))
SELECT NBA_CD, SOSOK, SOSOK2||'('||COMBO||')' AS SOSOK2 FROM TB_NBA
ORDER BY SEQ ASC
SOSOK을 기준으로 세로로 조회하면 6건 조회되는데 가로로 위와 같은 결과를 얻어내려고 합니다.
첫번째 row 결과 : LAL+CLE(I)
두번째 row 결과 : ((LAL+CLE(I))+BOS(I))
세번째 row 결과 : (((LAL+CLE(I))+BOS(I))+ATL(L))
네번째 row 결과 : (((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L))
다섯번째 row 결과 : ((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) + CHI(L))
마지막 row 결과 : (((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) + CHI(L)) + DET(R))
DB는 POSTGRESQL 입니다.
ARRAY_TO_STRING(ARRAY_AGG(SOSOK2||'('||COMBO||')'),'+') 함수를 사용하여
가로를 세로로 정렬해야 되는데
쿼리문으로 어떻게 구현해야 되는지 궁금해요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | WITH tb_nba AS ( SELECT 1 seq, 'ET1' nba_cd, 'LAL' sosok, 'I' combo, 'CLE' sosok2 UNION ALL SELECT 2, 'ET1' , 'LAL' , 'I' , 'BOS' UNION ALL SELECT 3, 'ET1' , 'LAL' , 'L' , 'ATL' UNION ALL SELECT 4, 'ET1' , 'LAL' , 'L' , 'CHA' UNION ALL SELECT 5, 'ET1' , 'LAL' , 'L' , 'CHI' UNION ALL SELECT 6, 'ET1' , 'LAL' , 'R' , 'DET' ) SELECT nba_cd , LPAD( '(' , COUNT (*):: INT , '(' ) || sosok || '+' || ARRAY_TO_STRING(ARRAY_AGG(sosok2 || '(' || combo || '))' ORDER BY seq), '+' ) x FROM tb_nba WHERE nba_cd = 'ET1' AND sosok = 'LAL' GROUP BY nba_cd, sosok ; |