假设我有一张看起来像这样的表:
Name value
1 Ford "some text here and there."
2 Honda "More Text Again"
如何编写一个sql函数,它会将所有行的'value'列附加到其中。所以结果将是
sometext here and there. More Text Again
如果我可以指定一个分隔符,那也很好。
答案 0 :(得分:0)
这是一个能够做到这一点的功能。在这种情况下,分隔符为,
:
CREATE FUNCTION AppendColumn (@ItemID int)
RETURNS varchar (8000)
AS
BEGIN
DECLARE @AppendedText varchar (8000)
SET @AppendedText = NULL -- MUST be null to avoid leading comma.
SELECT
@AppendedText = COALESCE (@AppendedText + ', ', '') + value
FROM
YourTable
WHERE
... ...
ORDER BY
... ...
RETURN @AppendedText
END
答案 1 :(得分:0)
如果您使用的是2005 +:
,则可以使用FOR XML PATH
作弊
SELECT Value + ','
FROM table
FOR XML PATH('')
答案 2 :(得分:0)
在变量中将值连接在一起,使用如下语句添加分隔符:
SELECT @result = @result + t.Value + @separator
FROM @test AS t;
作为一个完整的例子:
--** Declare test table
DECLARE @test TABLE (Name VARCHAR(20), Value VARCHAR(50));
--** Insert test data
INSERT INTO @test (Name, Value)
SELECT 'Ford', 'some text here and there.' UNION ALL
SELECT 'Ford', 'More Text Again'
--** Declare variables
DECLARE @result VARCHAR(1000);
DECLARE @separator VARCHAR(3);
--** Set separator and initialize the result (important)
SET @result = '';
SET @separator = ' | ';
--** Concatente the values together separating them with @separator
SELECT @result = @result + t.Value + @separator
FROM @test AS t;
--** Return the result removing the final separator
SELECT LEFT(@result, LEN(@result)-1);
这使用|作为分隔符,将给你:
some text here and there. | More Text Again