Utkarsh Agrawal Utkarsh Agrawal - 23 days ago 9
SQL Question

Data Pivoting in SQL using columns of SQL

Following is the Table Structure and below to that is desired output.

Please press Run Code Snippet to see the table structure.



<html>
<body>
<strong>Existing Structure</strong>
<br>
<br>
<table style="width:100%">
<tr>
<th>VoucherID</th>
<th>ColumnName</th>
<th>ColumnValue</th>

</tr>
<tr>
<td>10</td>
<td>Buyer Name</td>
<td>Mr. ABC</td>
</tr>
<tr>
<td>10</td>
<td>Buyer Address</td>
<td>Vasant Vihar</td>
</tr>
<tr>
<td>10</td>
<td>Buyer City</td>
<td>New Delhi</td>
</tr>
<tr>
<td>10</td>
<td>Buyer Email</td>
<td>email@gmail.com</td>
</tr>
</table>
<br>
<strong>I want output as follow:-</strong>
<br>
<br>
<table style="width:100%">
<tr>
<th>VoucherID</th>
<th>Buyer Name</th>
<th>BuyerAddress</th>
<th>BuyerCity</th>
<th>BuyerEmail</th>

</tr>
<tr>
<td>10</td>
<td>Mr. ABC</td>
<td>Vasant Vihar</td>
<td>New Delhi</td>
<td>email@gmail.com</td>
</tr>
</table>
</body>
</html>





Hi,
I am using SQL Server 2016.
Creating dynamic columns from "dbo.TransactionDetails.ColumnName" and taking values from "dbo.TransactionDetails.ColumnValue" where TransactionDetail is Table name and "ColumnName" column contains the name of columns which are to be created dynamically and values in that columns will be taken from "ColumnValue".
Please help to get the desired output. if it is possible thorough pivoting or any other way.Guide me through.

What i do is adding multiple Transaction Detail table and get desired output by using "where" which is termed as HARDCODING. but need to do it by pivoting or any other way

Answer Source

Try this one

create table #Table1
(VoucherID int, ColumnName varchar(100), ColumnValue varchar(255))

insert into #Table1
values (10,'Buyer Name','Mr. ABC')
, (10,'Buyer Address','Vasant Vihar')
, (10,'Buyer City','New Delhi')
, (10,'Buyer Email','email@gmail.com')



select * from #Table1

Select * from 
(
    Select VoucherID,ColumnName,ColumnValue from #Table1
) as src
pivot
(
    MAX(ColumnValue)
    FOR ColumnName IN([Buyer Name],[Buyer Address],[Buyer City],[Buyer Email])
)as pvt

--Drop table #Table1

enter image description here