아래쿼리에서 008,009도 그룹화하여 합을 구해서 나타내고 싶은데
기대 결과값
code val time name
001 4 08:52 메모리사용률
001 14 08:53 메모리사용률
006_007 5 08:52 totalBpm
006_007 10 08:53 totalBpm
008_009 28 08:52 totalp
WITH T (CODE, VAL, TIME, NAME) AS
( SELECT '001', '4', '08:52','메모리사용률' FROM DUAL
UNION ALL
SELECT '001', '14', '08:53','메모리사용률' FROM DUAL
UNION ALL
SELECT '006', '3', '08:52','송신bpm' FROM DUAL
UNION ALL
SELECT '006', '4', '08:53','송신bpm' FROM DUAL
UNION ALL
SELECT '007', '2', '08:52','수신bpm' FROM DUAL
UNION ALL
SELECT '007', '6', '08:53','수신bpm' FROM DUAL
UNION ALL
SELECT '008', '12', '08:52','수신p' FROM DUAL
UNION ALL
SELECT '009', '16', '08:52','송신p' FROM DUAL
)
SELECT CODE ,
VAL ,
TIME ,
NAME
FROM
(SELECT LISTAGG(CODE, ',') WITHIN GROUP(
ORDER BY TIME) OVER(PARTITION BY
CASE
WHEN CODE IN ( '006', '007' )
THEN NULL
ELSE CODE
END, TIME) AS CODE ,
SUM(VAL) OVER(PARTITION BY
CASE
WHEN CODE IN ( '006', '007' )
THEN NULL
ELSE CODE
END, TIME) AS VAL ,
TIME ,
ROW_NUMBER() OVER(PARTITION BY
CASE
WHEN CODE IN ( '006', '007' )
THEN NULL
ELSE CODE
END, TIME ORDER BY TIME) AS RN ,
CASE
WHEN CODE IN ( '006', '007' )
THEN 'TOTALBPM'
ELSE NAME
END AS NAME
FROM T
)
WHERE RN = 1
WITH T (CODE, VAL, TIME, NAME) AS ( SELECT '001', '4', '08:52','메모리사용률' FROM DUAL UNION ALL SELECT '001', '14', '08:53','메모리사용률' FROM DUAL UNION ALL SELECT '006', '3', '08:52','송신bpm' FROM DUAL UNION ALL SELECT '006', '4', '08:53','송신bpm' FROM DUAL UNION ALL SELECT '007', '2', '08:52','수신bpm' FROM DUAL UNION ALL SELECT '007', '6', '08:53','수신bpm' FROM DUAL UNION ALL SELECT '008', '12', '08:52','수신p' FROM DUAL UNION ALL SELECT '009', '16', '08:52','송신p' FROM DUAL ) SELECT L_CODE ,VAL ,TIME ,CASE WHEN CODE IN ( '006', '007' ) THEN 'TOTALBPM' WHEN CODE IN ( '008', '009' ) THEN 'TOTALP' ELSE NAME END AS NAME FROM ( SELECT CODE ,LISTAGG(CODE, ',') WITHIN GROUP(ORDER BY CODE, TIME) OVER(PARTITION BY TIME, SUBSTR(NAME, 3)) AS L_CODE ,SUM(VAL) OVER(PARTITION BY TIME, SUBSTR(NAME, 3) ORDER BY TIME) AS VAL ,TIME ,NAME ,ROW_NUMBER() OVER(PARTITION BY TIME, SUBSTR(NAME, 3) ORDER BY TIME) AS RN FROM T ) WHERE RN = 1 ORDER BY L_CODE, TIME
설명하신게 이해는 잘안되지만..
자꾸번거롭게 하여 죄송합니다.....
NAME 컬럼을 빼고여 원래 없는값인데 제가임의로 만든건데
혼란만 가중된거같네요...
007과008이 같은 시간안에 data가들어오기 때문에
007과008의 값은 더해서 한로우에 보여준다.
마찬가지로 008과 009도
같은 시간안에 data가들어오기 때문에
008과 009의 값도 더해서 한로우에 보여준다.
code와 time으로 (006,007) ,(008,009)을 한그룹으로 묶고
더할려고 하는데
partition by time, case when code in(006,007) then null
when code in(008,009) then null
이런식으로 해야되는거아닌가요? 잘안되네요..
기대 결과값
code val time
001 4 08:52
001 14 08:53
006_007 5 08:52
006_007 10 08:53
008_009 28 08:52
SELECT '001', '4', '08:52'FROM DUAL
UNION ALL
SELECT '001', '14', '08:53' FROM DUAL
UNION ALL
SELECT '006', '3', '08:52' FROM DUAL
UNION ALL
SELECT '006', '4', '08:53'FROM DUAL
UNION ALL
SELECT '007', '2', '08:52' FROM DUAL
UNION ALL
SELECT '007', '6', '08:53' FROM DUAL
UNION ALL
SELECT '008', '12', '08:52' FROM DUAL
UNION ALL
SELECT '009', '16', '08:52' FROM DUAL
with t (code, val, time, name) as ( select '001', '4', '08:52','메모리사용률' from dual union all select '001', '14', '08:53','메모리사용률' from dual union all select '006', '3', '08:52','송신bpm' from dual union all select '006', '4', '08:53','송신bpm' from dual union all select '007', '2', '08:52','수신bpm' from dual union all select '007', '6', '08:53','수신bpm' from dual union all select '008', '12', '08:52','수신p' from dual union all select '009', '16', '08:52','송신p' from dual) select LISTAGG(CODE, '_') WITHIN GROUP(ORDER BY CODE, TIME) code ,sum(val) val,time,decode(gb,1,'totalBpm',2,'totalp',max(name)) name from (select code, val, time, name , case when code in ('006','007') then 1 when code in ('008','009') then 2 end gb from t) group by time, gb order by 1,2;