Sql 表中的组和值
我有一张桌子:Sql 表中的组和值,sql,sql-server,tsql,concatenation,sql-server-2014,Sql,Sql Server,Tsql,Concatenation,Sql Server 2014,我有一张桌子: Col1 Col2 --- --- Bar Val1 Bar Val2 Bar Val3 Foo Val4 Foo Val5 Foo Val6 我需要编写一个输出 Col1 Col2 --- ---------------- Bar Val1, Val2, Val3 Foo Val4, Val5, Val6 我需要将其作为单个查询编写,因此无法使用COALESCE()进行连接,因为这需要使用变量和
Col1 Col2
--- ---
Bar Val1
Bar Val2
Bar Val3
Foo Val4
Foo Val5
Foo Val6
我需要编写一个输出
Col1 Col2
--- ----------------
Bar Val1, Val2, Val3
Foo Val4, Val5, Val6
我需要将其作为单个查询编写,因此无法使用COALESCE()
进行连接,因为这需要使用变量和循环
我的另一个解决方案是使用递归CTE。但是,我需要连接'Bar'和'Foo'的值。我想到了交叉应用
,但不知道使用交叉应用
和递归CTE是否可能达到这个结果
有什么建议吗 像这样试试:
select distinct
Col1,
(
select STUFF((select ',' + col2
from yourtable b
where b.col1 = a.col1 for xml path('')),1,1,'')
) as Col2
from yourtable a
DECLARE @tbl TABLE(Col1 VARCHAR(100),Col2 VARCHAR(100));
INSERT INTO @tbl VALUES
('Bar','Val1')
,('Bar','Val2')
,('Bar','Val3')
,('Foo','Val4')
,('Foo','Val5')
,('Foo','Val6');
SELECT DISTINCT Col1,Concatenated.Col2
FROM @tbl AS tbl
CROSS APPLY(
SELECT STUFF
(
(
SELECT ', ' + Col2
FROM @tbl AS InnerTbl
WHERE InnerTbl.Col1=tbl.Col1
FOR XML PATH('')
)
,1,2,'')
) AS Concatenated(Col2)
/* Result
Col1 Col2
Bar Val1, Val2, Val3
Foo Val4, Val5, Val6
*/
谷歌:“SQL Server聚合字符串连接”。这是一个典型的问题,解决方案通常使用“for xml path”。可能的重复仅用于建议::如果要在UI中显示结果,我的意思是使用C#/JAVA等作为前端,最好使用PLs,而不是在数据库级别。