将逗号分隔列解析为视图

时间:2014-12-03 21:34:53

标签: sql-server sql-server-2008 tsql

我有一个具有以下结构的表

> idx noc

idx是一个唯一的报告ID,但noc有逗号分隔的值列表。

我需要把它分成一个视图,但我似乎无法弄清楚如何选择我需要的东西 我创建了一个函数split,它解析逗号分隔值

ALTER FUNCTION [dbo].[udf_Split]
(
   @psCSString VARCHAR(8000)
)
RETURNS @otTemp TABLE(sID VARCHAR(20))
AS
BEGIN
 DECLARE @sTemp VARCHAR(10)

 WHILE LEN(@psCSString) > 0
 BEGIN
  SET @sTemp = LEFT(@psCSString, ISNULL(NULLIF(CHARINDEX(',', @psCSString) - 1, -1),
                    LEN(@psCSString)))
  SET @psCSString = SUBSTRING(@psCSString,ISNULL(NULLIF(CHARINDEX(',', @psCSString), 0),
                               LEN(@psCSString)) + 1, LEN(@psCSString))
  INSERT INTO @otTemp VALUES (@sTemp)
 END

RETURN
END

但我不明白如何获取价值。

数据库值的一个示例是:

idx 1
noc a,b,c
idx 2
noc a,x

我希望能够看到这个:

1 a
1 b
1 c
2 a
2 x

我需要循环吗?请帮助我指出正确的方向。

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT T1.IDX, T2.sID
FROM T1
CROSS APPLY dbo.udf_Split(T1.NOC) AS T2

显然" T1"是你的桌子。

如果您想要显示没有填充NOC的行,请使用OUTER代替CROSS

希望这有帮助。