Pivoting/Rotating row to column in SQL Server T-SQL
Posted by
Sudipta Bandyopadhyay
on
Wednesday, October 12, 2011
with
No comments
This code will help to convert data organized as rows to be organized as columns.
I need the output like this:
Problem statement:
Say I have a table (MyTable):
|
Year |
Month |
Count |
|
2009
|
12
|
22
|
|
2010
|
5
|
19
|
|
2010
|
2
|
1914
|
|
2010
|
3
|
51
|
|
2010
|
11
|
40
|
|
2010
|
12
|
3
|
|
2010
|
9
|
28
|
|
2010
|
1
|
138
|
|
2010
|
10
|
103
|
I need the output like this:
|
Year |
Jan |
Feb |
Mar |
Apr |
May |
Jun |
Jul |
Aug |
Sep |
Oct |
Nov |
Dec |
|
2009
|
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
NULL |
22
|
|
2010
|
138
|
1914
|
51
|
NULL |
19
|
NULL |
NULL |
NULL |
28
|
103
|
40
|
3
|
SQL way to achieve the goal:
SELECT Year,
SUM(Jan) AS Jan,
SUM(Feb) AS Feb,
SUM(Mar) AS Mar,
SUM(Apr) AS Apr,
SUM(May) AS May,
SUM(Jun) AS Jun,
SUM(Jul) AS Jul,
SUM(Aug) AS Aug,
SUM(Sep) AS Sep,
SUM(Oct) AS Oct,
SUM(Nov) AS Nov,
SUM(Dec) AS Dec
FROM (
SELECT Year,
Jan = CASE MONTH WHEN 1 THEN Count end,
Feb = CASE MONTH WHEN 2 THEN Count end,
Mar = CASE MONTH WHEN 3 THEN Count end,
Apr = CASE MONTH WHEN 4 THEN Count end,
May = CASE MONTH WHEN 5 THEN Count end,
Jun = CASE MONTH WHEN 6 THEN Count end,
Jul = CASE MONTH WHEN 7 THEN Count end,
Aug = CASE MONTH WHEN 8 THEN Count end,
Sep = CASE MONTH WHEN 9 THEN Count end,
Oct = CASE MONTH WHEN 10 THEN Count end,
Nov = CASE MONTH WHEN 11 THEN Count end,
Dec = CASE MONTH WHEN 12 THEN Count end
FROM MyTable
) AS TempTable
GROUP BY Year
ORDER BY Year
Using Pivot in TSQL:
SELECT Year,
[1] AS Jan,
[2] AS Feb,
[3] AS Mar,
[4] AS Apr,
[5] AS May,
[6] AS Jun,
[7] AS Jul,
[8] AS Aug,
[9] AS Sep,
[10] AS Oct,
[11] AS Nov,
[12] AS Dec
FROM
(
SELECT * FROM MyTable
PIVOT (SUM(Count)
FOR Month in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) as P
)AS TempTable
ORDER BY Year
0 comments :
Post a Comment