2014-12-03 89 views
0

我有一个具有以下结构解析逗号分隔列到视图

> idx noc 

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

我需要它分成一个观点,但我似乎无法弄清楚如何选择我需要 我创建了一个功能拆分,即解析出逗号分隔值

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

所以,你想使用你的功能,当你查询你的表? – dario 2014-12-03 21:49:59

+0

是的,我想我需要,除非有另一种方式来打破结果集 – 2014-12-03 21:50:26

回答

2

试试这个:

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

显然在哪里 “T1” 是你的表。

如果要显示没有填充NOC的行,请使用OUTER而不是CROSS

希望这会有所帮助。

+0

是的!从第一眼看起来它看起来棒极了!我会检查数据并标记你的答案,再次感谢你!这比我简单得多。我试过循环和更多的循环,并失败 – 2014-12-03 21:53:28

+0

有没有办法显示那些有IDX,但没有填写NOC字段? – 2014-12-03 21:55:58

+0

再次感谢你!计数匹配! – 2014-12-03 21:59:02