2014-04-22 93 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