将单列旋转为多列

时间:2014-04-22 13:38:15

标签: sql pivot

我需要查询帮助以帮助我执行以下操作:

我想采用以下格式:

SalesOrderNumber    CustomName      Status  Start       End         CrewName
29002               Turner, Linda   Closed  2014-01-22  2014-01-24  Espinoza,H.
29002               Turner, Linda   Closed  2014-01-22  2014-01-24  Severt,C.
29002               Turner, Linda   Closed  2014-01-22  2014-01-24  Valladares,R.

并将其转换为:

SalesOrderNumber  CustomName      Status  Start       End         CrewName1   CrewName2  CrewName3
29002             Turner, Linda   Closed  2014-01-22  2014-01-24  Espinoza,H  Severt,C.  Valladares,R.

提前谢谢大家!

2 个答案:

答案 0 :(得分:0)

您可以使用PIVOT获取结果,但您还需要使用row_number()之类的窗口函数为SalesOrderNumber中的每一行创建唯一值。然后,此唯一编号将用于创建新列:

select salesordernumber, customname, status, start, [end],
  Crew1 = [1], 
  Crew2 = [2], 
  Crew3 = [3]
from
(
  select salesordernumber, customname, status, start, [end], crewname,
    row_number() over(partition by salesordernumber
                      order by crewname) seq
  from yourtable
) d
pivot
(
  max(crewname)
  for seq in ([1], [2], [3])
) piv;

请参阅SQL Fiddle with Demo

答案 1 :(得分:-1)

我不是100%了解枢轴,但我认为这应该有效。它基于我们在这里使用的支点。如果它不起作用,我可能已经在Pivot中切换了CrewName和SalesOrderNumber。

*注意对于注释掉的四列,您需要将外部查询加入表中,或者将它们包含在数据透视表中。我认为这两种选择都有效。

SELECT
    SalesOrderNumber
    --,CustomName
    --,Status
    --,Start
    --,End
    ,[1]
    ,[2]
    ,[3]

    FROM ( SELECT
            SalesOrderNumber
            ,CrewName

            FROM <TableName>

            ) As QueryToPivot


    PIVOT (MAX(QueryToPivot.CrewName) FOR QueryToPivot.SalesOrderNumber IN ([1],[2],[3])) As QueryToPivot