Выбор / обновление одного поля из дубликатов - PullRequest
0 голосов
/ 04 августа 2020

Это мой Sql:

SELECT * FROM parameter1
WHERE parameter1_ID IN (34,11)

это дает более 400 результатов (что нормально), большинство результатов имеют несколько значений в столбце VALUE, а некоторые из результатов имеют повторяющиеся и несколько значений в столбец VALUE. Я хочу избавиться от повторяющихся значений VALUE в соответствующих результатах. Что я могу добавить в этот запрос для этого? Использование MS SQL studio

пример результата запроса:

ID   VALUE
1    100,200
2    100,100,200
3    200,200,300
4    200,200,300

результат Я хочу

ID   VALUE
1    100,200
2    100,200
3    200,300
4    200,300

1 Ответ

0 голосов
/ 04 августа 2020

Как говорили многие другие, способ хранения данных - это очень плохая практика и почти наверняка вызовет гораздо больше головной боли в будущем.

Тем не менее, если вы действительно не можете это изменить, есть еще варианты для вас. В SQL Server 2017 у вас есть преимущества string_split и string_agg:

declare @t table(ID int, val varchar(40))
insert into @t values
 (1,'100,200')
,(2,'100,100,200')
,(3,'200,200,300')
,(4,'200,200,300');

with s as
(
    select distinct t.ID
                   ,s.[value] as val
    from @t as t
        cross apply string_split(t.val,',') as s
)
select s.ID
      ,string_agg(s.val,',') as val
from s
group by s.ID;

Вывод

+----+---------+
| ID |   val   |
+----+---------+
|  1 | 100,200 |
|  2 | 100,200 |
|  3 | 200,300 |
|  4 | 200,300 |
+----+---------+
...