Добавить инкрементный счетчик к уникальным значениям подзапроса SQL - PullRequest
0 голосов
/ 02 ноября 2019

Так что мне немного сложно объяснить словами, поэтому я прошу прощения, если Название не имеет большого смысла. Я хочу сделать запрос и получить уникальные комбинации из таблицы с общим значением и добавить к этим значениям добавочный счетчик.

Так что, если бы у меня была такая таблица:

id | name | loc1  | loc2

1  | Fred | USA   |
2  | Fred |       | Spain
3  | Fred |       | 
4  | Ryan | Canada| USA
5  | Steph| Spain | Canada
6  | Fred | USA   |

Я хотел бы иметь запрос, который приводит к следующему:

name   | loc1  | loc2

Fred-1 | USA   |
Fred-2 |       | Spain
Fred-3 | USA   |
Ryan-1 | Canada| USA
Steph-1| Spain | Canada

Я могу получить уникальные значения, которые я хочу с запросом:

select id, name, loc1, loc2 from table1 where loc1 <> '' OR loc2 <> ''

Но добавлениесчетное число поставило меня в тупик. Я полагаю, что если бы я мог как-то использовать ROW_NUMBER () для каждого уникального подзапроса, который может работать, но я не знаю, как управлять этим. Обратите внимание, что на самом деле не имеет значения, в каком порядке они находятся (то есть не имеет значения, какой ряд получает Фреда -1, -2 или -3).

Есть мысли?

Скрипка здесь: http://sqlfiddle.com/#!18/5c079/1

Ответы [ 2 ]

2 голосов
/ 02 ноября 2019

Использование row_number() внутри concat():

select 
  concat(name, '-', row_number() over (partition by name order by id)) as name, 
  loc1, loc2 
from table1
where loc1 <> '' OR loc2 <> ''

См. Демоверсию . Результаты:

> name    | loc1   | loc2  
> :------ | :----- | :-----
> Fred-1  | USA    |       
> Fred-2  |        | SPAIN 
> Fred-3  | USA    |       
> Ryan-1  | CANADA | USA   
> Steph-1 | SPAIN  | CANADA
1 голос
/ 02 ноября 2019

Вы также можете попробовать:

select t.name + '-' + convert(varchar(150),t.rn)  from (
select *,ROW_NUMBER() over (partition by name order by id) rn from Yourtable
) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...