728x90
Cross-Tab 쿼리 생성시 대개 SP에서 처리(Temp테이블 이용)하는것과 동일한
결과 내는 방법입니다.
(Pubs DB이용)
방법1>
SELECT DatePart(yy, Ord_date)년도, SUM( Qty) AS Total,
SUM(CASE DATEPART(qq, Ord_date) WHEN 1 THEN Qty ELSE 0 END) AS [1분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 2 THEN Qty ELSE 0 END) AS [2분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 3 THEN Qty ELSE 0 END) AS [3분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 4 THEN Qty ELSE 0 END) AS [4분기]
FROM Sales
GROUP BY DatePart(yy, Ord_date )
Order by 1
방법2>
SELECT DatePart(yy, Ord_date)년도, SUM( Qty) AS Total,
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-1)))) AS [1분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-2)))) AS [2분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-3)))) AS [3분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-4)))) AS [4분기]
From Sales
Group by DatePart(yy, Ord_date)
Order by 1
--------------------------------------------------------
결과 >
년도 Total 1분기 2분기 3분기 4분기
------------------------------------------------------------
1992 80 0 80 0 0
1993 250 60 165 0 25
1994 163 0 0 163 0
* 방법1은 간단한 CASE~WHEN문으로 보시면 아실것 같고,
방법2의 경우는
(1-ABS(SIGN(DatePart(qq, Ord_date)-1))) 의 경우
각 분기외의 부분은 0으로 처리되어 (Qty * 0), 각분기별로 컬럼이 생성되고
이 컬럼들을 SUM시키게 됩니다.
- ABS와 SIGN 함수는 시퀄내장 함수이므로, 추가적인 사항은
SQL도움말을 참조하시면 될듯 합니다.
결과 내는 방법입니다.
(Pubs DB이용)
방법1>
SELECT DatePart(yy, Ord_date)년도, SUM( Qty) AS Total,
SUM(CASE DATEPART(qq, Ord_date) WHEN 1 THEN Qty ELSE 0 END) AS [1분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 2 THEN Qty ELSE 0 END) AS [2분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 3 THEN Qty ELSE 0 END) AS [3분기],
SUM(CASE DATEPART(qq, Ord_date) WHEN 4 THEN Qty ELSE 0 END) AS [4분기]
FROM Sales
GROUP BY DatePart(yy, Ord_date )
Order by 1
방법2>
SELECT DatePart(yy, Ord_date)년도, SUM( Qty) AS Total,
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-1)))) AS [1분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-2)))) AS [2분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-3)))) AS [3분기],
SUM(Qty * (1-ABS(SIGN(DatePart(qq, Ord_date)-4)))) AS [4분기]
From Sales
Group by DatePart(yy, Ord_date)
Order by 1
--------------------------------------------------------
결과 >
년도 Total 1분기 2분기 3분기 4분기
------------------------------------------------------------
1992 80 0 80 0 0
1993 250 60 165 0 25
1994 163 0 0 163 0
* 방법1은 간단한 CASE~WHEN문으로 보시면 아실것 같고,
방법2의 경우는
(1-ABS(SIGN(DatePart(qq, Ord_date)-1))) 의 경우
각 분기외의 부분은 0으로 처리되어 (Qty * 0), 각분기별로 컬럼이 생성되고
이 컬럼들을 SUM시키게 됩니다.
- ABS와 SIGN 함수는 시퀄내장 함수이므로, 추가적인 사항은
SQL도움말을 참조하시면 될듯 합니다.
[출처] [mssql]Cross-Tab Query(SP이용X)|작성자 필립박
'데이터베이스 > SQL Server' 카테고리의 다른 글
[mssql]sp_lock... 그 뒤에 숨은 더 많은 정보들 (0) | 2008.04.29 |
---|---|
[mssql]SQL에서 블록킹과 데드락을 처리하기 위해서 어떻게 해야 되나요? (0) | 2008.04.29 |
[mssql]임의의 행 무작위 추출 (0) | 2008.04.29 |
MS SQL Server 성능 조정 및 최적화 (0) | 2008.04.29 |
SQL2000 Table Hints 관련 문서 (0) | 2008.04.29 |