Создать UDF для разделения строки на один столбец с разделителями-запятыми - PullRequest
0 голосов
/ 10 октября 2018

В приведенных ниже примерах данных я хочу разбить строку на столбец с помощью UDF.

CREATE TABLE ##temp
([date] datetime,
    category varchar(3),
    amount money)
insert into ##temp values ('1/1/2012', 'ABC', 1000.00)
insert into ##temp values ('2/1/2012', 'DEF', 500.00)
insert into ##temp values ('2/1/2012', 'GHI', 800.00)
insert into ##temp values ('2/10/2012', 'DEF', 700.00)
insert into ##temp values ('3/1/2012', 'ABC', 1100.00);

я создаю функцию ниже

CREATE FUNCTION dbo.Splitter(@Name NVARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(@Name) 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
RETURN @cols
END

текущий вывод

CatSplit
[ABC]
[DEF]
[GHI]
[DEF]
[ABC]

что я хочу (ожидаемый вывод)

         CatSplit
[ABC],[DEF],[GHI],[DEF],[ABC]

1 Ответ

0 голосов
/ 10 октября 2018

Зачем вам здесь нужна функция, вы можете сделать это без использования функции:

SELECT STUFF((SELECT  ',' + QUOTENAME(t.category ) 
              from #temp t
              FOR XML PATH(''), TYPE
             ).VALUE('.', 'NVARCHAR(MAX)'), 1, 1, ''
            ) AS CatSplit

РЕДАКТИРОВАТЬ: Если вы используете это как имя столбца для поворота или что-то еще, вы можете определитьодна переменная и использовать ее везде в коде, не нужно использовать функцию.

DECLARE @cols AS NVARCHAR(MAX)

SELECT @cols = STUFF((SELECT  ',' + QUOTENAME(t.category ) 
                      FROM #temp t
                      FOR XML PATH(''), TYPE
                     ).VALUE('.', 'NVARCHAR(MAX)'), 1, 1, ''
                    ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...