2014-10-10 91 views
1

可以說我有CSV值的列:a,b,c,dSELECT DISTINCT CSV列

我有一個表,函數dbo.Split(@Data varchar,@Delimeter varchar),返回他們的行,但不知道它怎麼會在這裏適用。

所以我們可以說我試圖從一列收集所有不同的值到多行。

如果我做了Distinct,我要得到最終的:

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

我想回的是:

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

我將如何做到這一點?

回答

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) 
+0

謝謝,但你有沒有一個解決方案,少一點的服務器資源密集型? – 2014-10-10 04:39:00

+0

@ControlFreak - 請查看http://rextester.com/ROAYWA64678 – 2014-10-10 04:50:18