假设我们有这样一个简单的查询:
SELECT x
FROM t
WHERE t.y = z
如果我们在结果集中有一条记录,我希望将变量@v
设置为该值。如果我们有两个或更多的记录,我希望结果用逗号和空格分隔。编写这段T-SQL代码的最佳方式是什么?
示例:
1条记录的结果集:
Value1
包含2条记录的结果集:
Value1, Value2
包含3条记录的结果集:
Value1, Value2, Value3
发布于 2012-03-15 19:27:03
这将为您提供逗号分隔列表中的值列表
create table #temp
(
y int,
x varchar(10)
)
insert into #temp values (1, 'value 1')
insert into #temp values (1, 'value 2')
insert into #temp values (1, 'value 3')
insert into #temp values (1, 'value 4')
DECLARE @listStr varchar(255)
SELECT @listStr = COALESCE(@listStr+', ', '') + x
FROM #temp
WHERE #temp.y = 1
SELECT @listStr as List
drop table #temp
发布于 2012-03-15 19:25:38
您可以使用XML来做到这一点:
DECLARE @V VarChar(4000);
SELECT @V = CONVERT(VarChar(4000), (
SELECT x + ', '
FROM t
WHERE t.y = z
FOR XML PATH('')
));
-- To remove the final , in the list:
SELECT @V = LEFT(@V, LEN(@V) - 2);
SELECT @V;
有关其他选项,请查看Concatenating Row Values in SQL。
发布于 2012-03-15 19:30:02
由于是SQL Server 2008,您可以使用FOR XML:
SELECT SUBSTRING(
(SELECT ',' + t.x
FROM t
WHERE t.y = z
FOR XML PATH('')),
2,
200000) AS CSV
FOR XML PATH('')选择XML格式的表,但路径为空。SUBSTRING(select,2,2000000)删除前导',‘
https://stackoverflow.com/questions/9726660
复制