将行转换为列中的问题

时间:2013-11-11 09:30:32

标签: sql sql-server-2012 pivot

我有一张桌子 - 员工详细信息。其中我们有两列: - 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

3 个答案:

答案 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)

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

Efficiently convert rows to columns in sql server

答案 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 演示