选择Distinct CSV Column

时间:2014-10-10 04:15:13

标签: sql-server sql-server-2008 sql-server-2012

假设我有一个包含CSV值的列:a,b,c,d

我有一个表函数dbo.Split(@Data varchar,@Delimeter varchar),它在行中返回它们,但不确定它在这里是如何应用的。

所以我想说我正在尝试将所有不同的值从一列收集到多行。

如果我做Distinct,我将最终得到:

 Column
-------------------------------------
 b
 a,b,c
 c,d
 d

我想回来的是:

 Column
-------------------------------------
 a
 b
 c
 d

我该怎么做?

1 个答案:

答案 0 :(得分:2)

CREATE TABLE #temp
  (
     name VARCHAR(10)
  )

INSERT INTO #temp
VALUES     ('b'),
            ('a,b,c'),
            ('c,d'),
            ('d')

SELECT DISTINCT Split.a.value('.', 'VARCHAR(100)') data
FROM   (SELECT Cast ('<M>' + Replace(name, ',', '</M><M>') + '</M>' AS XML) AS Data
        FROM   #temp) AS A
       CROSS APPLY Data.nodes ('/M') AS Split(a)