我有一个逗号分隔的变量,如
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
作为单行的列值,其中misc费用是第一列,univfee是下一列等等
答案 0 :(得分:0)
SQL Server没有内置功能,可以将逗号分隔值添加到单行中的单独列中。您必须使用函数或存储过程构建它。
答案 1 :(得分:0)
以下函数将分隔以逗号分隔的列表的每个值 进入列并返回一个表。
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