2014-04-22 62 views
0

我需要一个查询有助于帮助我做到以下几点:枢轴与单列为多列

我想借此以下格式:

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. 

谢谢大家提前!

+0

什么是对的行获得组合在一起的标准是什么?是否有将被分组的行数上限?到目前为止你做了什么? –

+0

你到目前为止尝试过什么?你在使用哪个SQL? (MSSQL,MySQL,PostgreSQL ...)? –

+0

@ScottHunter分组将在“SalesOrderNumber”上完成,且上限不超过6个 –

回答

-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 
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