#sql #sql-server #tsql #mssqlft
#sql #sql-сервер #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
Результат, который я ищу, является. Это удаляет все повторения и сохраняет только отдельные значения с их соответствующим идентификатором.
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
Однако по-прежнему безуспешно.. Буду признателен за любую помощь. Спасибо.
Ответ №1:
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. Идеальное решение, Майкл. Не могу поверить, что потратил на это 5 часов, а вы решаете ее за короткое время. Похоже, мне нужно многому научиться. Большое спасибо.
Ответ №2:
попробуйте выбрать distinct .
если вы используете mysql, вы можете использовать функцию group_concat() для перегруппировки различных значений.