이런식으로 합계는 18 인데 그 합계의 각각을 18 숫자 바로 밑에 (a:3, b:5, c:10) 표현을 하고 싶은데요.
쿼리로 어떻게 가능할까요??...아 머리아포요. -ㅠ-
by 손님
[2012.08.16 17:10:34]
WITH T AS ( SELECT SYSDATE C, 'a' A, 3 B FROM DUAL UNION ALL SELECT SYSDATE C, 'b' A, 5 B FROM DUAL UNION ALL SELECT SYSDATE C, 'c' A, 10 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'a' A, 4 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'b' A, 1 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'c' A, 0 B FROM DUAL ) SELECT C, DECODE(LV,2,WM_CONCAT(A||':'||B),SUM(B)) B FROM T ,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <=2) GROUP BY C,LV ORDER BY C
by 손님
[2012.08.16 17:37:08]
WITH T AS ( SELECT SYSDATE C, 'a' A, 3 B FROM DUAL UNION ALL SELECT SYSDATE C, 'b' A, 5 B FROM DUAL UNION ALL SELECT SYSDATE C, 'c' A, 10 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'a' A, 4 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'b' A, 1 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'c' A, 0 B FROM DUAL ) SELECT DECODE(LV,1,C,NULL) C, DECODE(LV,2,A,B) AS A FROM ( SELECT C, MAX(SUBSTR(SYS_CONNECT_BY_PATH(A||':'||B,','),2)) AS A, SUM(B) AS B FROM ( SELECT T.*, DECODE(A,'a',1,'b',2,'c',3) AS D FROM T ) T START WITH D = 1 CONNECT BY C = PRIOR C AND D = PRIOR D+1 GROUP BY C ), (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 2) ;
by 솔밭
[2012.08.16 18:24:15]
WITH T AS ( SELECT SYSDATE C, 'a' A, 3 B FROM DUAL UNION ALL SELECT SYSDATE C, 'b' A, 5 B FROM DUAL UNION ALL SELECT SYSDATE C, 'c' A, 10 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'a' A, 4 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'b' A, 1 B FROM DUAL UNION ALL SELECT SYSDATE+1 C, 'c' A, 0 B FROM DUAL ) SELECT C, DECODE(LV,2,ListAgg(A||':'||B, ',') WITHIN GROUP(ORDER BY A)) B FROM T ,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <=2) GROUP BY C,LV ORDER BY C
by 깨비
[2012.08.17 10:07:27]
감쏴요~ ^^/
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.