如何循环选择语句会产生格式化文本? 例如,select就像:
select name from table
我们想要一个像这样的变量@names:
"name1,name2,name3"
数据库是SQL Server 2005
答案 0 :(得分:5)
如果表包含多个记录,即:
1, name1, ..
2, name2, ..
3, name3, ..
然后这个查询:
DECLARE @names VARCHAR(MAX)
SELECT @names = COALESCE(@names + ', ', '') + name
FROM table
将产生下一个结果:
name1, name2, name3
答案 1 :(得分:1)
这需要在一个函数中完成。没有快速的方法来做到这一点。通常,您可以在客户端代码中执行此操作。
答案 2 :(得分:1)
如果你计划在每行上创建一个函数来形成另一个查询,那么它将非常慢,因为需要为每一行调用该函数。您应该一次处理数据集,它一次完成所有行。这是如何为另一个查询的每一行连接多个值的示例:
set nocount on;
declare @t table (id int, name varchar(20), x char(1))
insert into @t (id, name, x)
select 1,'test1', 'a' union
select 1,'test1', 'b' union
select 1,'test1', 'c' union
select 2,'test2', 'a' union
select 2,'test2', 'c' union
select 3,'test3', 'b' union
select 3,'test3', 'c'
SELECT p1.id, p1.name,
stuff(
(SELECT
', ' + x
FROM @t p2
WHERE p2.id=p1.id
ORDER BY name, x
FOR XML PATH('')
)
,1,2, ''
) AS p3
FROM @t p1
GROUP BY
id, name
输出:
id name p3
----------- -------------------- -----------
1 test1 a, b, c
2 test2 a, c
3 test3 b, c