Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换sql server 2005中以列为单位的行_Sql_Sql Server_Sql Server 2005_Pivot - Fatal编程技术网

转换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

必须创建不使用逗号的独立列有许多关于这方面的文章,如,