【问题标题】:Parse Comma separated column into a view将逗号分隔的列解析为视图
【发布时间】:2015-02-01 15:05:08
【问题描述】:

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

> 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

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

【问题讨论】:

  • 那么,您想在查询表时使用您的函数吗?
  • 是的,我想我需要这样做,除非有其他方法可以分解结果集

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


【解决方案1】:

试试这个:

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

显然“T1”是你的桌子。

如果您想显示没有填充 NOC 的行,只需使用 OUTER 而不是 CROSS。

希望这会有所帮助。

【讨论】:

  • 是的!乍一看,它看起来很棒!我会检查数据并标记您的答案,再次感谢您!这比我简单多了。我尝试了循环和更多循环并失败了
  • 有没有办法也显示那些有 IDX 但没有填写 NOC 字段的人?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多