-2

我有一张表——EmployeeDetails。其中我们有两列:- ColumnName 和 Details。下表是:-

ColumnNames     Details
-----------     -------
Sno             1
Firstname       Daya
Lastname        Sharma
EmailId         <email1>@gmail.com
sno             2
Firstname       Kriti 
Lastname        joshi
EmailId         <email2>@yahoo.com

现在我需要在列中转换名字、姓氏、电子邮件和 sno。我们怎么能做到这一点?

我想将列名转换为

Sno  FirstName  Lastname  Emailid
1    Daya       Sharma    <email1>@gmail.com
2    Kriti      Joshi     <email2>@yahoo.com
4

3 回答 3

0
select sno,firstname,lastname,Emailid
from
(
select columnnames,details from table
)d

pivot
(
max(details)
for columnnames in([sno],[firstname],[lastname],[emailid])
)piv;
于 2013-11-11T09:40:01.083 回答
0

您可以参考下面的链接以获得答案。同样的问题已发布在以下链接:

在sql server中有效地将行转换为列

于 2013-11-11T09:53:49.293 回答
0

必须至少再拥有一列(我们称之为 EmployeeID)才能正确旋转您的数据。否则无法分辨哪个姓氏属于哪个名字、儿子、电子邮件 ID 等

如果您有这样的专栏,那么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;

输出:

| 斯诺| 名字 | 姓氏 | 电子邮件 |
|-----|-----------|----------|-------- |
| 1 | 大亚 | 夏尔马 | @gmail.com |
| 2 | 克里提 | 乔希 | @yahoo.com |

这是SQLFiddle演示

于 2013-11-11T10:19:45.550 回答