您好
如何从SQL查询的结果中编译单个字符串。
E.g。
Table A
Column: Name
Row 0 : John
Row 1 : Sam
Row 2 : Kate
生成的SQL查询必须返回一行,结果为单个字符串。
E.g。
"John, Sam, Kate"
注意:使用MS SQL 2005
答案 0 :(得分:3)
这是我通常使用的,只需删除表格并添加自己的表格:
DECLARE @A
TABLE ( Name VARCHAR(50) );
INSERT INTO @A ([Name]) VALUES ('John');
INSERT INTO @A ([Name]) VALUES ('Sam');
INSERT INTO @A ([Name]) VALUES ('Kate');
SELECT REPLACE((SELECT [Name] AS [data()]
FROM @A
FOR XML PATH('')
) , ' ', ', ') [Concatenated]
应该导致:
Concatenated
-------------------
John, Sam, Kate
答案 1 :(得分:2)
答案 2 :(得分:0)
使用光标。这样的事情(来自here)应该让你开始:
DECLARE @tbl TABLE(id INT PRIMARY KEY,list VARCHAR(8000))
设置NOCOUNT
DECLARE @c INT,@ p VARCHAR(8000),@ cNext INT,@ pxtxt VARCHAR(40)
DECLARE c CURSOR FOR SELECT CategoryId, ProductName FROM Northwind..Products ORDER BY CategoryId, ProductName ; OPEN c ; FETCH NEXT FROM c INTO @cNext, @pNext ; SET @c = @cNext ; WHILE @@FETCH_STATUS = 0 BEGIN IF @cNext > @c BEGIN INSERT @tbl SELECT @c, @p ; SELECT @p = @PNext, @c = @cNext ; END ELSE SET @p = COALESCE(@p + ',', SPACE(0)) + @pNext ; FETCH NEXT FROM c INTO @cNext, @pNext END INSERT @tbl SELECT @c, @p ; CLOSE c ;
DEALLOCATE c;
SELECT * FROM @tbl;
答案 3 :(得分:0)
快速而肮脏的方式,而不是很多错误检查,但它的工作......
DECLARE @theList VARCHAR(2000)
SET @theList =''
SELECT @TheList=@theList+[name]+','
FROM <tableName> WHERE [name] is not null
IF @@rowcount > 0
SET @TheList=left(@TheList,len(@TheList)-1)
PRINT @theList