Pivot and Unpivot table in SQL SERVER
SELECT non-pivoted column,
firstpivotedcolumn AS column name,
secondpivotedcolumn AS column name,
lastpivotedcolumn AS column name
FROM
(SELECT query that produces the data>)
AS aliasforsourcequery
PIVOT
(
aggregation function(column being aggregated)
FOR
column that contains the values that will become column headers
IN ( firstpivotedcolumn,secondpivotedcolumn,
last pivoted column)
) AS aliasforthepivottable (optional ORDER BY clause)
For example, suppose we have a table called tbl_student which contains the columns studentname, grade and marks. The query for creating this table and inserting data is given below:-
Syntax for creating the database:-
Create database DB_Pivot
Query for creating table:-
Create table tbl_student (studentname nvarchar(200), grade nvarchar(10), marks int)
Query for inserting the data into the table:-
Select ‘ Pankaj Kumar’, ‘II’, 29Now if we want to see the data in the table tbl_student, it will looks like shown below:-
Select * from tbl_student
Suppose we want to display the data as shown below:-
Avinash Dubey 30 20 35
Then we can either use the Select……… Case statement or the Pivot command.
In this article I am going to show the use of the Pivot operator to display data as shown above:-
from
( Select grade, studentname, marks from tbl_student) as sourcetable
Pivot ( avg(marks) for grade in ([I],[II],[III],[IV],[V])) as pivotable order by V desc,IV desc,III desc,II desc,I desc
Or we can use the given below query also:-
Select studentname, [I], [II], [III], [IV] , [V] from tbl_student
Pivot ( avg(marks) for grade in ([I],[II],[III],[IV],[V])) as pivotable order by V desc,IV desc,III desc,II desc,I desc
Both the query will gives the same result. In the first query we use the Derived table as the Source table and in the 2nd query we use the table tbl_student as the source table.
Unpivot table:- Unpivot table is reverse of Pivot table as it rotate the columns of a table into the value of a column. For example, suppose we have a table say tbl_stdmarksdata whose structure us given below:-
Create table tbl_stdmarksdata (studentname nvarchar(100), I int, II int, III int, IV int, V int)
Please note:- Also as per the MSDN,
When PIVOT and UNPIVOT are used against databases that are upgraded to SQL Server 2005 or later, the compatibility level of the database must be set to 90 or higher.
Further reading about the Pivot operator can be done at the following Pivot Operator
Also if you want to read about SQL Pivot and Unpivot in Oracle, Ben Brumm has written a very good article “Oracle SQL PIVOT and UNPIVOT: The Complete Guide”
Discover more from Technology with Vivek Johari
Subscribe to get the latest posts sent to your email.
Finding hard to learn anything in database……..Just come to vivek’s blog and its guaranteed that will get the solution in simplest way . Again very nice article 🙂
main difference pivot and unpivot purpose….
Yes, thanks for your valuable comments
HI Friends,
I need one small help,
Month Babu Kumar revenue
1 10 125 E14+E15
2 21 54 E15+E16
3 5 5 E16+E17
4 2 21 E17+E18
5 12 56 E18+E19
How to use pivot and unpivot
Explained with real time example,
http://www.negablog.com/2013/01/unpivot-table-in-sql-server.html
http://www.negablog.com/2013/01/pivot-table-using-sql-server.html
Hi Vivek, Very nice article
~Mayur
Thanks Vivek, It is nice and simple article so understanding is better
Thanks sir ,it was very helping
Is it possible to update an unnormalized table from normalized table using a SQL UPDATE statement and Unpivot function?
I have two tables T1 and T2.
T1 has data row headings segmentID, Segment, [201401],][201402]…
T2 has columns YearMo, rate …
I want to be able to unpivot T1 and update the [201401]…columns with data from T2.
Thank you for any help!!
Christina
Hi Crissy, Yes it is very much possible to unpivot the table T1. can you give more details about the update you want from table T2
Regards
Vivek
Very helpful, thanks much!
Vivek, thank you for the clearest, most easy to follow explanation I have found for setting up a pivot query.