如何通过select语句循环结果以获得格式化文本? 例如选择是这样的:如何在SQL Sever中格式化TSQL SELECT输出
select name from table
,我们希望有一个变量@names这样的:
"name1,name2,name3"
数据库是SQL Server 2005中
如何通过select语句循环结果以获得格式化文本? 例如选择是这样的:如何在SQL Sever中格式化TSQL SELECT输出
select name from table
,我们希望有一个变量@names这样的:
"name1,name2,name3"
数据库是SQL Server 2005中
如果表中包含多个记录,即:
1, name1, ..
2, name2, ..
3, name3, ..
那么这个查询:
DECLARE @names VARCHAR(MAX)
SELECT @names = COALESCE(@names + ', ', '') + name
FROM table
会产生一个结果:
name1, name2, name3
这正是我需要的。谢谢。也varchar(max)不能用于一个SQL函数参数,所以我用varchar(500)为例 – mohamadreza 2010-04-18 08:00:49
这将需要一个函数内完成。没有快速的方法来做到这一点。通常情况下,您可以在客户端代码中执行此操作。
如果你打算在每一行上做一个函数来形成另一个查询,它会很慢,因为需要为每一行调用该函数。您应该一次处理一组数据,它一次处理所有行。这是如何连接多个值再查询的每一行的例子:
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
OUTPUT:
id name p3
----------- -------------------- -----------
1 test1 a, b, c
2 test2 a, c
3 test3 b, c
@mohamadreza,根据您的评论你打算换此http://计算器。/2661437/how-to-format-tsql-select-output-in-sql-sever/2661475#2661475在一个函数中。但是,如果你这样做,并且你在查询的选择列表中使用它,它将是非常低效的。有很多更好的方法来处理这个问题,请参阅我的答案,了解一个例子。 – 2010-04-19 13:49:54