테이블 구조 및 내용은 다음과 같습니다.
SEQ, KIND, DATE, ITEMCODE, EA, GUM
1, 1, 16.01.01, 1153, 50, 50000
1, 1, 16.01.01, 1154, 30, 30000
출력하고자 하는 내용은 다음과 같이 ITEMCODE별로 각 월별로 합계된 수량, 금액을 구하고 있습니다.
품목코드, 1월수량, 1월금액, 2월수량, 2월금액.......12월수량, 12월금액
1153, 50, 50000, 0, 0, .......0,0
1154, 30, 30000, 0, 0, .......0,0
원하는 결과값을 내기 위한 현재 쿼리는 다음과 같습니다.
다음 쿼리를 좀더 줄일수 있을까요?
select ITEMCODE,
SUM(ISNULL(CASE WHEN WOL='01' THEN EA END, 0)) AS '1월 수량',
SUM(ISNULL(CASE WHEN WOL='01' THEN GUM END, 0)) AS '1월 금액',
SUM(ISNULL(CASE WHEN WOL='02' THEN EA END, 0)) AS '2월 수량',
SUM(ISNULL(CASE WHEN WOL='02' THEN GUM END, 0)) AS '2월 금액',
SUM(ISNULL(CASE WHEN WOL='03' THEN EA END, 0)) AS '3월 수량',
SUM(ISNULL(CASE WHEN WOL='03' THEN GUM END, 0)) AS '3월 금액',
SUM(ISNULL(CASE WHEN WOL='04' THEN EA END, 0)) AS '4월 수량',
SUM(ISNULL(CASE WHEN WOL='04' THEN GUM END, 0)) AS '4월 금액',
SUM(ISNULL(CASE WHEN WOL='05' THEN EA END, 0)) AS '5월 수량',
SUM(ISNULL(CASE WHEN WOL='05' THEN GUM END, 0)) AS '5월 금액',
SUM(ISNULL(CASE WHEN WOL='06' THEN EA END, 0)) AS '6월 수량',
SUM(ISNULL(CASE WHEN WOL='06' THEN GUM END, 0)) AS '6월 금액',
SUM(ISNULL(CASE WHEN WOL='07' THEN EA END, 0)) AS '7월 수량',
SUM(ISNULL(CASE WHEN WOL='07' THEN GUM END, 0)) AS '7월 금액',
SUM(ISNULL(CASE WHEN WOL='08' THEN EA END, 0)) AS '8월 수량',
SUM(ISNULL(CASE WHEN WOL='08' THEN GUM END, 0)) AS '8월 금액',
SUM(ISNULL(CASE WHEN WOL='09' THEN EA END, 0)) AS '9월 수량',
SUM(ISNULL(CASE WHEN WOL='09' THEN GUM END, 0)) AS '9월 금액',
SUM(ISNULL(CASE WHEN WOL='10' THEN EA END, 0)) AS '10월 수량',
SUM(ISNULL(CASE WHEN WOL='10' THEN GUM END, 0)) AS '10월 금액',
SUM(ISNULL(CASE WHEN WOL='11' THEN EA END, 0)) AS '11월 수량',
SUM(ISNULL(CASE WHEN WOL='11' THEN GUM END, 0)) AS '11월 금액',
SUM(ISNULL(CASE WHEN WOL='12' THEN EA END, 0)) AS '12월 수량',
SUM(ISNULL(CASE WHEN WOL='12' THEN GUM END, 0)) AS '12월 금액'
FROM (select ITEMCODE, substring(DDATE,4,2) as 'WOL', EA, GUM from 원본테이블 where KIND = '1') a
group by ITEMCODE
Comment 3
-
minsouk
2016.01.28 03:01
가져가서 어플에서 펴세요 뭐 이런걸 ^^ -
Terry
2016.01.28 10:00
동적쿼리로 처리하면....큰 차이는 없지만..
살짝(?) 줄일수는 있습니다.-_-;;;
큰 차이가 없는거 같긴 하지만요^^;
---쿼리시작---
Declare @sql varchar(max)Declare @i integer = 0
Declare @j integer = 0
Set @sql = ''
Set @sql = @sql + '
Select ITEMCODE
'
While @i < 12
Begin
Set @i = @i + 1
Set @sql = @sql + ',Sum(IsNull(Case When WOL = ''' + (Case When Len(CONVERT(char(2),@i)) = 1 Then '0' + CONVERT(char(1),@i) Else CONVERT(char(2),@i) End ) + ''' Then EA END ,0)) As ''' + (Case When Len(CONVERT(char(2),@i)) = 1 Then '0' + CONVERT(char(1),@i) Else CONVERT(char(2),@i) End ) + '월 수량'''
Set @sql = @sql + ',Sum(IsNull(Case When WOL = ''' + (Case When Len(CONVERT(char(2),@i)) = 1 Then '0' + CONVERT(char(1),@i) Else CONVERT(char(2),@i) End ) + ''' Then GUM END ,0)) As ''' + (Case When Len(CONVERT(char(2),@i)) = 1 Then '0' + CONVERT(char(1),@i) Else CONVERT(char(2),@i) End ) + '월 금액'''
End
Set @sql = @sql + ' FROM (select ITEMCODE, substring(DDATE,4,2) as ''WOL'', EA, GUM from 원본테이블 where KIND = ''1'') a
group by ITEMCODE
'EXEC (@sql)
---쿼리끝--- -
뇽이
2016.01.28 10:48
다른 방식으로 결과값을 도출할수 있는 방법이 없을까 해서 질문 올려보았습니다.
답변해주신 minsouk 님 Terry 님 감사합니다.