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||')'),'+') 함수를 사용하여
가로를 세로로 정렬해야 되는데
쿼리문으로 어떻게 구현해야 되는지 궁금해요.
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 ;