我如何得到:
id Name Value
1 A 4
1 B 8
2 C 9
to
id Column
1 A:4, B:8
2 C:9
我如何得到:
id Name Value
1 A 4
1 B 8
2 C 9
to
id Column
1 A:4, B:8
2 C:9
当前回答
如果你启用了clr,你可以使用GitHub中的Group_Concat库
其他回答
让我们变得非常简单:
SELECT stuff(
(
select ', ' + x from (SELECT 'xxx' x union select 'yyyy') tb
FOR XML PATH('')
)
, 1, 2, '')
替换这一行:
select ', ' + x from (SELECT 'xxx' x union select 'yyyy') tb
你的疑问。
这类问题在这里经常被问到,解决方案将在很大程度上取决于潜在的需求:
https://stackoverflow.com/search?q=sql+pivot
and
https://stackoverflow.com/search?q=sql+concatenate
通常,如果没有动态sql、用户定义函数或游标,就没有仅使用sql的方法来完成此任务。
只是补充一下Cade所说的,这通常是一个前端显示的事情,因此应该在那里处理。我知道有时候100%用SQL编写文件导出或其他“仅SQL”解决方案更容易,但大多数时候这种连接应该在显示层中处理。
从http://groupconcat.codeplex.com安装SQLCLR聚合
然后你可以像这样写代码来得到你想要的结果:
CREATE TABLE foo
(
id INT,
name CHAR(1),
Value CHAR(1)
);
INSERT INTO dbo.foo
(id, name, Value)
VALUES (1, 'A', '4'),
(1, 'B', '8'),
(2, 'C', '9');
SELECT id,
dbo.GROUP_CONCAT(name + ':' + Value) AS [Column]
FROM dbo.foo
GROUP BY id;
一个例子是
在Oracle中可以使用LISTAGG聚合函数。
原始记录
name type
------------
name1 type1
name2 type2
name2 type3
Sql
SELECT name, LISTAGG(type, '; ') WITHIN GROUP(ORDER BY name)
FROM table
GROUP BY name
导致
name type
------------
name1 type1
name2 type2; type3