我有一张桌子 - 员工详细信息。其中我们有两列: - ColumnName和Details。以下是表格: -
ColumnNames Details
----------- -------
Sno 1
Firstname Daya
Lastname Sharma
EmailId <email1>@gmail.com
sno 2
Firstname Kriti
Lastname joshi
EmailId <email2>@yahoo.com
现在我需要在列中转换firstname,lastname,email和sno。我们怎么做到这一点?
我想将列名转换为
Sno FirstName Lastname Emailid
1 Daya Sharma <email1>@gmail.com
2 Kriti Joshi <email2>@yahoo.com
答案 0 :(得分:0)
select sno,firstname,lastname,Emailid
from
(
select columnnames,details from table
)d
pivot
(
max(details)
for columnnames in([sno],[firstname],[lastname],[emailid])
)piv;
答案 1 :(得分:0)
您可以参考以下链接获取答案。同样的问题已发布在以下链接:
答案 2 :(得分:0)
您必须至少再增加一列(让我们称之为EmployeeID)才能正确转动您的数据。否则,无法确定哪个姓氏属于哪个名字,Son,emailid等
如果您有这样一个列,那么PIVOT
将按预期工作
SELECT Sno, Firstname, Lastname, Emailid
FROM
(
SELECT EmployeeId, ColumnNames, Details
FROM EmployeeDetails
) s
PIVOT
(
MAX(Details)
FOR ColumnNames IN([Sno],[Firstname],[Lastname],[Emailid])
) p;
输出:
| SNO | FIRSTNAME | LASTNAME | EMAILID | |-----|-----------|----------|--------------------| | 1 | Daya | Sharma | @gmail.com | | 2 | Kriti | joshi | @yahoo.com |
这是 SQLFiddle 演示