Как разбить повторяющуюся строку, разделенную запятыми в T-SQL - PullRequest
2 голосов
/ 11 апреля 2011

Я пробовал несколько испытаний и пока не могу понять.Буду признателен за любую помощь.

У меня есть таблица, как показано ниже.

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

Результат, который я ищу, таков.Он удаляет все повторы и сохраняет только отдельные значения с их ассоциированным идентификатором.

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

Я пытался посчитать количество запятых по (len (replace (@ProjectNames, ','))

Использование функции разделения из http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

Тем не менее, все равно не повезло .. Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 апреля 2011
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 голосов
/ 11 апреля 2011

попробуйте выбрать отличное.

если вы используете mysql, вы можете использовать функцию group_concat () для перегруппировки различных значений.

...