我试图找出如何使用可伸缩值将多个行组合成基于唯一ID的逗号分隔列。
我有db.master的这2个测试值1111、2222,但是这些值可能很多。
在此表中,它们每个都有多个不同的组ID
[Meterdb]。[dbo]。[组]
Serial groupId
1111 1
1111 2
1111 3
1111 4
2222 5
2222 6
2222 7
2222 8
这是我想要的结果
Serial groups
1111 1,2,3,4
2222 5,6,7,8
我已经将它与单个值一起使用,但是一旦我插入多个值,它只会显示第一个结果。
我显然在代码中存在缺陷,也许在结构本身中也存在缺陷,但是我一直无法弄清楚如何使它能够工作于可伸缩值。
要获得逗号分隔的结果,我一直在使用STUFF函数。
因此,我实际上试图实现的是如何正确获取stuff命令,以便仅将=的值返回给要搜索的序列。
如果我没有将声明的值插入stuff命令中,它将仅返回不与序列列相关联的group列中的所有值。 我也尝试过将STUFF函数作为子查询加入,但是结果相同。
DECLARE @tempD TABLE (list VARCHAR(25))
insert into @tempD
values ('1111') ,('2222')
Select serial, groups =
( STUFF (( SELECT ',' +convert (varchar(30),GroupId)
from master md
left outer join [Meterdb].[dbo].[Group] rg on md.serial = rg.[serial]
WHERE serial in ( select list from @tempD )
FOR XML PATH ('')) ,1 ,1, ''))
from master
WHERE serial in ( select list from @tempD)
我除外
serial groups
1111 1,2,3,4
2222 5,6,7,8
结果:
serial groups
1111 1,2,3,4
如何获取仅将=组返回序列的函数,以便可以插入多个变量。
答案 0 :(得分:0)
可能更像这样(显然未经测试)
DECLARE @tempD TABLE (list VARCHAR(25));
INSERT INTOl @tempD values ('1111') ,('2222');
SELECT serial,
STUFF (G.Groups,1,1,SPACE(0)) AS groups
FROM master AS MD
OUTER APPLY(SELECT( SELECT ',' +CONVERT(VARCHAR(30),GroupId)
FROM [Meterdb].[dbo].[Group] AS rg
WHERE md.serial = rg.[serial]
FOR XML PATH(''), TYPE
).value ('text()[1]','varchar(max)')
) AS G(groups)
WHERE MD.serial IN ( SELECT list FROM @tempD)