将列转换为行

时间:2012-02-16 12:50:22

标签: sql-server-2005

我有一个表格结构,其中数据按以下顺序排列

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

我需要按以下顺序获取输出

1   Abc Def 
2   Ghi Jkl Mno

简而言之,我需要在多列(动态)的1行中为EmployeeID的所有territoryID记录。基本上,列需要转换为行

感谢任何帮助

谢谢和问候 Sanjai Palliyil

1 个答案:

答案 0 :(得分:4)

您可以使用pivot和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 

您需要包含与一名员工所涵盖的最大区域数一样多的数字。如果您事先无法知道,则需要动态构建查询。