[쥔장] =================================
나름 유용한 쿼리이다. 잘 활용해보길..
========================================
select
decode(row_number() over(partition by proc_date order by user_no), 1, proc_date, ' ') proc_date,
nvl(decode(grouping_id(proc_date, user_no), 1, '소계', user_no), '합계') user_no,
sum(decode(terminal_type, '1', 1, 0)) machine_data,
sum(decode(terminal_type, '2', 1, 0)) localpc_data
from user_terminal_use_list
where 1=1
-- and dlns_dt between '20110501' and '20110515'
-- and dlns_dt between '20110516' and '20110529'
-- and dlns_dt between '20110530' and '20110531'
and status_type = '0'
group by rollup(proc_date, user_no)
order by proc_date, user_no
;
여기서 포인트를 보자면..
1) decode(row_number() over(partition by proc_date order by user_no), 1, proc_date, ' ') proc_date 와
2) group by rollup(proc_date, user_no) 이다.
1) 은 user_no에 의한 proc_date를 뽑아내는 것.
row_number() : 무조건 순서대로 순번을 뽑아낸다.
over (partition by proc_date...) proc_date 기준으로 분류를 해서...
즉, proc_date 기준으로 분류를 하는데 무조건 순번을 뽑아내고, proc_date 기준으로 순번이 1이라면 proc_date 값을 넣고, 아니면 빈값을 넣어주라...
2) 는 proc_date, user_no 에 의한 그룹화시켜 이에 대응되는 데이터의 합을 내준다.
결과는...
이와 같은 형태로 나온다.
나름 유용한 쿼리이다. 잘 활용해보길..
========================================
select
decode(row_number() over(partition by proc_date order by user_no), 1, proc_date, ' ') proc_date,
nvl(decode(grouping_id(proc_date, user_no), 1, '소계', user_no), '합계') user_no,
sum(decode(terminal_type, '1', 1, 0)) machine_data,
sum(decode(terminal_type, '2', 1, 0)) localpc_data
from user_terminal_use_list
where 1=1
-- and dlns_dt between '20110501' and '20110515'
-- and dlns_dt between '20110516' and '20110529'
-- and dlns_dt between '20110530' and '20110531'
and status_type = '0'
group by rollup(proc_date, user_no)
order by proc_date, user_no
;
여기서 포인트를 보자면..
1) decode(row_number() over(partition by proc_date order by user_no), 1, proc_date, ' ') proc_date 와
2) group by rollup(proc_date, user_no) 이다.
1) 은 user_no에 의한 proc_date를 뽑아내는 것.
row_number() : 무조건 순서대로 순번을 뽑아낸다.
over (partition by proc_date...) proc_date 기준으로 분류를 해서...
즉, proc_date 기준으로 분류를 하는데 무조건 순번을 뽑아내고, proc_date 기준으로 순번이 1이라면 proc_date 값을 넣고, 아니면 빈값을 넣어주라...
2) 는 proc_date, user_no 에 의한 그룹화시켜 이에 대응되는 데이터의 합을 내준다.
결과는...
proc_date | user_no | machine_date | localpc_data |
20110302 | 100 | 1 | 2 |
101 | 0 | 2 | |
102 | 0 | 6 | |
103 | 0 | 4 | |
104 | 0 | 24 | |
105 | 0 | 3 | |
106 | 0 | 5 | |
107 | 0 | 6 | |
소계 | 1 | 52 | |
20110303 | 100 | 0 | 39 |
101 | 1 | 37 | |
102 | 0 | 88 | |
104 | 7 | 32 | |
105 | 20 | 16 | |
106 | 0 | 15 | |
107 | 0 | 17 | |
소계 | 28 | 224 | |
합계 | 29 | 276 |
이와 같은 형태로 나온다.