我要求使用sql查询将相同的列值连接到单行。 表A
TxnId Sequence Value
111 1 A
111 2 for
111 3 Apple
222 1 B-
222 2 Ball
333 1 C-Cat
预期结果
TxnId Value
111 A for Apple
222 B- Ball
333 C-Cat
请帮忙。我需要根据TxnId和序列
连接值答案 0 :(得分:1)
Stuff()
的 xml
功能可以帮助您
SELECT TxnId,
Value = STUFF(
(
SELECT ' '+Value FROM <table>
WHERE TxnId = T.TxnId
ORDER BY Sequence FOR XML PATH(''), TYPE
).value('(text())[1]', 'nvarchar(MAX)'), 1, 1, '')
FROM <table> T GROUP BY TxnId;
结果:
TxnId Value
111 A for Apple
222 B- Ball
333 C-Cat
答案 1 :(得分:0)
这个listagg
有一个标准的SQL函数,SQL Server尚不支持它。但是,自SQL Server的最新版本以来,它有类似的东西:string_agg
。
它沿着这条线工作:
SELECT TxnId
, string_agg(value, ' ') WITHIN GROUP (ORDER BY Sequence)
FROM ...
GROUP BY TxnId
答案 2 :(得分:0)
使用group concatenation的XML路径。
SQL代码
declare @myt table (txnid int,[sequence] int , [value] nvarchar(50))
insert into @myt
values
(111 ,1, 'A' ),
(111 ,2, 'for' ),
(111 ,3, 'Apple'),
(222 ,1, 'B-' ),
(222 ,2, 'Ball' ),
(333 ,1, 'C-Cat')
SELECT txnid, [Value] = STUFF((SELECT N' ' + [Value]
FROM @myt AS p2
WHERE p2.txnid = p.txnid
ORDER BY [sequence]
FOR XML PATH(N'')), 1, 1, N'')
FROM @myt AS p
GROUP BY txnid
ORDER BY txnid;
<强>结果强>