2012-02-16 68 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 

您需要包含尽可能多的数字作为一个员工所覆盖的领土的最大数量。如果您事先不知道,则需要动态构建查询。