2012-02-16 64 views
2

我有一個表結構,其中數據來自以下順序轉換列行

EmployeeID  TerritoryID 
    1    Abc 
    1    Def 
    2    Ghi 
    2    Jkl 
    2    Mno 

我需要輸出按以下順序

1 Abc Def 
2 Ghi Jkl Mno 

總之我需要所有的TerritoryID記錄對於多列中的一行中的EmployeeID(動態)。基本上列需要轉換到行

任何幫助表示讚賞

感謝和問候 Sanjai Palliyil

回答

4

你可以通過樞軸與ROW_NUMBER()使用的查詢。像這樣的東西。

declare @T table 
(
    EmployeeID int, 
    TerritoryID char(3) 
) 

insert into @T values 
(1, 'Abc'), 
(1, 'Def'), 
(2, 'Ghi'), 
(2, 'Jkl'), 
(2, 'Mno') 

select EmployeeID, [1], [2], [3] 
from 
    (
    select EmployeeID, 
      TerritoryID, 
      row_number() over(partition by EmployeeID order by TerritoryID) as rn 
    from @T 
) as T 
pivot 
(
    min(TerritoryID) for rn in ([1], [2], [3]) 
) as P 

您需要包含儘可能多的數字作爲一個員工所覆蓋的領土的最大數量。如果您事先不知道,則需要動態構建查詢。