我有一个具有以下结构的表
> 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
我需要循环吗?请帮助我指出正确的方向。
答案 0 :(得分:2)
试试这个:
SELECT T1.IDX, T2.sID
FROM T1
CROSS APPLY dbo.udf_Split(T1.NOC) AS T2
显然" T1"是你的桌子。
如果您想要显示没有填充NOC的行,请使用OUTER
代替CROSS
。
希望这有帮助。