Sql функция для добавления столбца - PullRequest
0 голосов
/ 09 июля 2010

Допустим, у меня есть таблица, которая выглядит следующим образом:

Name      value  
1 Ford    "some text here and there."    
2 Honda   "More Text Again"   

Как мне написать функцию sql, которая добавит мне столбец 'value' всех строк. так что результат будет

sometext here and there. More Text Again

также было бы неплохо, если бы я мог указать разделитель.

Ответы [ 3 ]

0 голосов
/ 09 июля 2010

Вы можете обмануть, используя FOR XML PATH, если вы используете 2005 +:

SELECT Value + ','
FROM table
FOR XML PATH('')
0 голосов
/ 09 июля 2010

Объедините значения вместе в переменной, добавив разделитель, используя следующую инструкцию:

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 
0 голосов
/ 09 июля 2010

Вот функция, которая делает это. В этом случае разделитель равен ,:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...