2011-04-11 22 views
2

我试过了一些试验,但还没弄明白。任何帮助,将不胜感激。如何分割在T-SQL中用逗号表示的重复字符串

我有一个如下表。

LocationID  Project Name 
1    A,A 
1    A 
1    A,B,C 
1    A,C 
1    B,C 
1    C 
2    A 
2    C,D,E 
2    E,F 
2    F 
3    G,H 
3    H 

我在找的结果是。它将删除所有重复项,并仅保留与其关联的ID不同的值。

LocationID  Project Name 
1    A 
1    B 
1    C 
2    A 
2    C 
2    D 
2    E 
2    F 
3    G 
3    H 

我试图通过(LEN计数逗号的数量(替换(@ProjectNames, ''))

http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

采用分体式功能然而,仍然没有运气。任何帮助将不胜感激,谢谢。

回答

4
declare @T table(LocationID int, PName varchar(50)) 

insert into @T values 
(1,    'A,A'), 
(1,    'A'), 
(1,    'A,B,C'), 
(1,    'A,C'), 
(1,    'B,C'), 
(1,    'C'), 
(2,    'A'), 
(2,    'C,D,E'), 
(2,    'E,F'), 
(2,    'F'), 
(3,    'G,H'), 
(3,    'H') 

select distinct 
    T.LocationID, 
    r.value('.', 'varchar(50)') as [Project Name] 
from @T as T 
    cross apply 
    (select cast('<r>'+replace(PName, ',', '</r><r>')+'</r>' as xml)) as x(x) 
    cross apply 
    x.nodes('r') as r(r) 
+0

完美的解决方案Mikael。我不敢相信我花了5个小时来解决这个问题,并且很快解决了这个问题。看起来我需要学习很多。非常感谢。 – 2011-04-11 11:34:52

0

尝试选择不同的。

如果你使用mysql,你可以使用GROUP_CONCAT()函数来重新组合不同值。

相关问题