Create table Test01 (day1 varchar(10), junno varchar(10), money1 int)
insert into Test01 values ('2015-07-01', '00001', 1000)
insert into Test01 values ('2015-07-01', '00002', 1000)
insert into Test01 values ('2015-07-02', '00001', 2000)
insert into Test01 values ('2015-07-03', '00002', 2000)
insert into Test01 values ('2015-08-01', '00001', 1000)
insert into Test01 values ('2015-08-01', '00002', 1000)
insert into Test01 values ('2015-08-02', '00001', 1000)
insert into Test01 values ('2015-08-02', '00002', 1000)
select
ROW_NUMBER() Over (order by M.MonthGr) as Rownum
,Case
When M.MonthGr = 1 then '전체합계'
When M.day1Gr = 1 then '월합계'
Else M.day1
End as day1
,Case
When (M.junnoGr = 1) and (M.day1Gr = 1) then ''
When (M.junnoGr = 1) then '합계'
Else M.junno
End as junno
,M.tmoney
From
(
select Substring(day1,1,7) as Monthx
, day1,junno, Sum(money1) as tmoney
, Grouping(junno) as junnoGr
, Grouping(day1) as day1Gr
, Grouping(Substring(day1,1,7)) as MonthGr
from Test01 Group by Rollup(Substring(day1,1,7),day1,junno)
) M
-- 실행하면 아래처럼 나옵니다.(일자별 무시하고 채번이 됩니다.)
1 2015-07-01 00001 1000
2 2015-07-01 00002 1000
3 2015-07-01 합계 2000
4 2015-07-02 00001 2000
5 2015-07-02 00002 2000
6 2015-07-02 합계 4000
7 월합계 6000
8 2015-08-01 00001 1000
9 2015-08-01 00002 1000
10 2015-08-01 합계 2000
11 2015-08-02 00001 1000
12 2015-08-02 00002 1000
13 2015-08-02 합계 2000
14 월합계 4000
15 전체합계 10000
이걸 아래처럼 (채번하는 하는 방법?)
1 2015-07-01 00001 1000
2 2015-07-01 00002 1000
3 2015-07-01 합계 2000
1 2015-07-02 00001 2000
2 2015-07-02 00002 2000
3 2015-07-02 합계 4000
4 월합계 6000
1 2015-08-01 00001 1000
2 2015-08-01 00002 1000
3 2015-08-01 합계 2000
1 2015-08-02 00001 1000
2 2015-08-02 00002 1000
3 2015-08-02 합계 2000
4 월합계 4000
5 전체합계 10000
월합계, 전체합계 의 채번은 편의상 적은겁니다.
어떻게 쿼리를 해여 일자별로 채번을 할수 있나요.?
한수 부탁드립니다.
감사합니다.
Comment 2
-
샤오린
2015.08.06 16:38
-
한태
2016.02.04 20:04
Create table Test01 (day1 varchar(10), junno varchar(10), money1 int)
insert into Test01 values ('2015-07-01', '00001', 1000)
insert into Test01 values ('2015-07-01', '00002', 1000)
insert into Test01 values ('2015-07-02', '00001', 2000)
insert into Test01 values ('2015-07-03', '00002', 2000)
insert into Test01 values ('2015-08-01', '00001', 1000)
insert into Test01 values ('2015-08-01', '00002', 1000)
insert into Test01 values ('2015-08-02', '00001', 1000)
insert into Test01 values ('2015-08-02', '00002', 1000)
select case
when GROUPING(day1)+GROUPING(month(day1))=1 then '월합계'
when GROUPING(day1)+GROUPING(month(day1))=2 then '전체합계'
else day1 end as DAY1,
isnull(case
when GROUPING(day1)+GROUPING(month(day1))=1 then ' '
when GROUPING(day1)+GROUPING(month(day1))=2 then ' '
else junno end,'합계') as junno,
sum(money1) as money1
from test01
group by grouping sets((month(day1)),(month(day1),day1),(month(day1),day1,junno),())
저도 한번 도전해봤는데 글쓴이님 까지밖에 못하겠네요..
partition by 하면 자꾸 순서가 바껴서 여기까지밖에 못했습니다.
ROW_NUMBER() OVER(PARTITION BY '컬럼' ORDER BY '컬럼' ) 을 이용해 보세요
날짜를 그룹화하여 순번을 채번하면 될듯합니다.