Как преобразовать CSV в столбцы одной строки? - PullRequest
1 голос
/ 06 января 2011

У меня переменная, разделенная запятыми, например

a,b,c,d,e

и я хочу, чтобы все эти переменные были столбцами одной строки

как

a|b|c|d|e --------

больше примеров

MISC FEES,UNIV EXE,ID FEE,TENT FEE,CAU FEES,GYM FEE 

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

MISCFEES UNIVEXE IDFEE TENTFEE CAUFEES GYMFEE 

как значения столбца одной строки, в которой сборы за разность являются первым столбцом, univfee - следующим столбцом и т. Д.

Ответы [ 2 ]

0 голосов
/ 06 января 2011

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

CREATE FUNCTION [dbo].[fn_CommaDelimitedToTable]
    (
      @String AS varchar(MAX)
    )
RETURNS @RetTable Table ( DataValue varchar(500) )
AS BEGIN
    DECLARE @ReturnedTable Table ( DataValue varchar(500) )
    DECLARE @BreakLoop Int
    DECLARE @CharIndex Int
    DECLARE @StringTmp Varchar(MAX)
    DECLARE @WrdTmp Varchar(500)
    DECLARE @Count Int
    SET @StringTmp = @String
    SET @Count = 0
    SET @BreakLoop = 0
    WHILE @BreakLoop = 0
        BEGIN
            SET @CharIndex = CHARINDEX(',', @StringTmp, 1)
            IF @CharIndex = 0 OR @CharIndex IS NULL
                BEGIN
                    SET @WrdTmp = Ltrim(Rtrim(@StringTmp))
                    SET @BreakLoop = 1
                END
            ELSE 
                BEGIN

                    SET @WrdTmp = ltrim(rtrim(Left(@StringTmp, @CharIndex - 1)))

                    SET @StringTmp = Ltrim(rtrim(Right(@StringTmp,
                                                       Len(@StringTmp)
                                                       - Len(@WrdTmp) - 1)))
                END

            INSERT  INTO @ReturnedTable ( DataValue )
            VALUES  ( @WrdTmp )
            SET @WrdTmp = ''
            SET @Count = @Count + 1
            IF @BreakLoop = 1 
                BEGIN 
                    BREAK
                END
            ELSE 
                BEGIN
                    CONTINUE
                END
        END
    INSERT  INTO @RetTable
            SELECT  DataValue
            FROM    @ReturnedTable
    RETURN
   END
0 голосов
/ 06 января 2011

SQL Server не имеет встроенной функциональности для добавления значений, разделенных запятыми, в отдельные столбцы в одной строке. Вы должны построить это, используя функцию или хранимую процедуру.

Вы можете использовать CHARINDEX , чтобы найти позицию каждого разделителя, а затем использовать SUBSTRING , чтобы получить каждое значение между запятыми и соответственно обновить столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...