转换sql server 2005中以列为单位的行
我一直在寻找一种在多个列、一个单元格中显示一行的方法。它的内容由逗号分隔 例如,代替:转换sql server 2005中以列为单位的行,sql,sql-server,sql-server-2005,pivot,Sql,Sql Server,Sql Server 2005,Pivot,我一直在寻找一种在多个列、一个单元格中显示一行的方法。它的内容由逗号分隔 例如,代替: ProjectID Label ———— ——– 1200 label1 1200 label2 1200 label3 我希望我的查询结果如下所示: ProjectID 1 2 3 ———— ——– 1200
ProjectID Label
———— ——–
1200 label1
1200 label2
1200 label3
我希望我的查询结果如下所示:
ProjectID 1 2 3
———— ——–
1200 label1 label2, label3
提前感谢这比仅使用
pivot
更具挑战性,但只是一点点。问题是您没有列来指定标签的位置,因此必须添加它
下面是一个使用聚合的解决方案:
with t as (
select t.*, row_number() over (partition by ProjectId order by label) as seqnum
from t
)
select ProjectId,
max(case when seqnum = 1 then label end) as [1],
max(case when seqnum = 2 then label end) as [2],
max(case when seqnum = 3 then label end) as [3]
from t
group by ProjectId;
以下是使用pivot的解决方案:
with t as (
select t.*, row_number() over (partition by ProjectId order by label) as seqnum
from t
)
select ProjectId, [1], [2], [3]
from t
pivot (max(label) for seqnum in ([1], [2], [3])
) as pvt
必须创建不使用逗号的独立列有许多关于这方面的文章,如,