2013-05-16 105 views
0

输出:SQL服务器:从CTE转换行到列

colName 
----------------------- 
branch1  
branch1  
branch1  
unclassified 

我想要的行转换成列,如:

colName   colName colName colName 
--------------------------------------------- 
unclassified branch1 branch1 branch1 

请让我知道这样做的最好的办法。

在此先感谢!

+0

也许你想**转换**而不是** Conert **? –

回答

4

没有看到完整的查询基于行数我建议增加一个row_number()你的CTE,然后pivoting数据:

;with cte as 
(
    select *, -- replace * with your column names 
     ROW_NUMBER() over(partition by colName order by colName) rn 
    from yourdata 
) 
select [1] as colName1, 
    [2] as colName2, 
    [3] as colName3, 
    [4] as colName4 
from cte 
pivot 
(
    max(colName) 
    for rn in ([1], [2], [3], [4]) 
) piv; 

如果你不想使用旋转功能,那么你可以也可以使用具有CASE表达式的聚合函数:

;with cte as 
(
    select *, -- replace * with your column names 
     ROW_NUMBER() over(partition by colName order by colName) rn 
    from yourdata 
) 
select 
    MAX(case when rn = 1 then colName end) colName1, 
    MAX(case when rn = 2 then colName end) colName2, 
    MAX(case when rn = 3 then colName end) colName3, 
    MAX(case when rn = 4 then colName end) colName4 
from cte 
-- group by other columns in select if needed 
+0

就是这样。在FROM语句中阅读[T-SQL Pivot](http://msdn.microsoft.com/zh-cn/library/ms177634%28v=sql.105%29.aspx)选项。 – DougM