두개의 테이블에서 날짜별로 금액의 합을 계산해서 수익을 표기하는 쿼리를 작성할려구 하는데
쉽게 되지가 않네요..
테이블 구조는 아래와 같습니다.
테이블1
idx id 금액 날짜
3 aaa 1000 20150101
2 aab 1000 20150101
1 aab 1000 20150102
테이블2
idx id 금액 날짜
3 aaa 100 20150101
2 aab 2000 20150101
1 aab 100 20150102
예상 출력 결과물
날짜 테이블 금액1 테이블 금액2 차액
20150101 2000 2100 -100
20150102 1000 100 900
여기에 아이디도 검색을 할수 있도록 하고 싶습니다.
또한 만약에 20150101~ 20150103 까지 검색을 한경우 위에 데이터 기준으로 날짜로 Group by로 묶었을때
20150103 데이터가 자동으로 테이블금액1과 2에 0으로 표기가 될수 있게도 할 수있나요??
조언좀 부탁드립니다. 이틀째 하고는 있는데 Group by로 묶어도 보고 하위 쿼리써보고 했지만 딱 좋은게 없습니다. 따로 따로는 하겠는데
묶어서는 제 머리로는 힘드네요... ㅜ.ㅜ
Comment 1
-
Terry
2015.02.01 15:39
날짜의 경우는
몇년치..또는 몇십년치를 그냥 Table 에 쌓아두시구..
그걸 토대로 하시면 될겁니다.
나중에도 요긴하게 쓰이실 거에요~~
하기 쿼리문에서 With절의
table3 이 그 역할이라고 보시면 될듯..
/* --------------- 쿼리 시작 ----------------------- */
Declare @as_from_idx char(10)
Declare @as_to_idx char(10)
Declare @as_from_ymd char(10)
Declare @as_to_ymd char(10)
Select @as_from_idx = '1'
Select @as_to_idx = '3'
Select @as_from_ymd = '20150101'
Select @as_to_ymd = '20150103'
With table1 As
(
Select '3' As idx,'aaa' As id,1000 As 금액,'20150101' As 날짜 Union All
Select '2' As idx,'aab' As id,1000 As 금액,'20150101' As 날짜 Union All
Select '1' As idx,'aab' As id,1000 As 금액,'20150102' As 날짜
)
,table2 As
(
Select '3' As idx,'aaa' As id,100 As 금액,'20150101' As 날짜 Union All
Select '2' As idx,'aab' As id,2000 As 금액,'20150101' As 날짜 Union All
Select '1' As idx,'aab' As id,100 As 금액,'20150102' As 날짜
)
,table3 As
(
Select '20150101' As 날짜 Union All
Select '20150102' As 날짜 Union All
Select '20150103' As 날짜 Union All
Select '20150104' As 날짜
)
Select
a.날짜 As 날짜
-- ,a.idx As idx
,Sum(a.금액1) As 금액1
,Sum(a.금액2) As 금액2
, IsNull(Sum(a.금액1),0)
- IsNull(Sum(a.금액2),0)
As 차액
From (
Select
a.날짜 As 날짜
,a.금액 As 금액1
,0 As 금액2
From table1 As a
Where a.idx Between @as_from_idx And @as_to_idx
And a.날짜 Between @as_from_ymd And @as_to_ymd
Union All
Select
a.날짜 As 날짜
,0 As 금액1
,a.금액 As 금액2
From table2 As a
Where a.idx Between @as_from_idx And @as_to_idx
And a.날짜 Between @as_from_ymd And @as_to_ymd
Union All
Select
a.날짜 As 날짜
,0 As 금액1
,0 As 금액2
From table3 a
Where a.날짜 Between @as_from_ymd And @as_to_ymd
And Not Exists (
Select 'x'
From table1 x
Where x.날짜 Between @as_from_ymd And @as_to_ymd
And x.idx Between @as_from_idx And @as_to_idx
And x.날짜 = a.날짜
)
And Not Exists (
Select 'x'
From table2 x
Where x.날짜 Between @as_from_ymd And @as_to_ymd
And x.idx Between @as_from_idx And @as_to_idx
And x.날짜 = a.날짜
)
) a
Group By
a.날짜
-- ,a.idx
Order By
a.날짜
-- ,a.idx
/* --------------- 쿼리 끝 ----------------------- */
--결과물
날짜 | 금액1 | 금액2 | 차액 |
-------------------------------------------
20150101 | 2000 | 2100 | -100 |
20150102 | 1000 | 100 | 900 |
20150103 | 0 | 0 | 0 |