如何拆分在T-SQL中用逗号分隔的重复字符串

时间:2011-04-11 07:47:13

标签: sql sql-server tsql mssqlft

我已经尝试了一些试验,但还是无法弄明白。任何帮助将不胜感激。

我有一张如下表格。

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

中的分割功能

然而,仍然没有运气..任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

尝试选择distinct。

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