使用for xml路径将多行连接到一行

时间:2017-06-16 16:19:06

标签: sql sql-server

我有以下sql:

select distinct a1.Id, a1.Value from
#table1 a1
where a1.Id in
(select a2.Id from #table1 a2
join #table1 a3 on a2.Id = a3.Id
 where a2.Value <> a3.Value)

它将来自同一个表的相同ID分组,以防它们各自的值不同。示例输出:

| Id |Value|
| 1  |  1  |
| 1  |  3  |
| 1  |  2  | 
| 2  |  4  | 
| 2  |  5  |

我想将这些行连接成一个,所以它看起来像这样:

| Id | Value | 
| 1  | 1,3,2 |
| 2  | 4,5   |

我尝试使用xml路径,但我无法弄清楚如何正确执行:

select a1.Id, 
SUBSTRING(
(
SELECT ',' + CAST(a1.Value as varchar(50)) [text()]
where a1.Id in
    (select a2.Id from #table1 a2
    join #table1 a3 on a2.Id= a3.Id
    where a2.Value<> a3.Value
    ) 
FOR XML PATH ('') 
), 2, 1000) [Value]
FROM #table a1

但它不起作用。我正在使用Microsoft SQL。 我在子查询中遇到了转换问题&#39;进入有效的sql,我可以使用&#39; FOR XML PATH(&#39;&#39;)&#39;。我尝试过使用交叉申请,但我无法弄清楚如何正确加入同一桌子的3倍

0 个答案:

没有答案