Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простой запрос на исключение специфического дубликата  [new]
alexFV
Member

Откуда:
Сообщений: 331
Добрый день!

Помогите, пожалуйста, с простым запросом.

Есть таблица Cities:
ID Name Country Population
2 Город1 1 1000
3 Город2 1 2000
4 Город1 2 500
5 Город3 2 300


Есть запрос:
SELECT 
       [Name]
      ,[Country]
      ,[Population]
	  , 1 as Code
  FROM [Cities]
  WHERE Country = 1
UNION
 SELECT 
       [Name]
      ,[Country]
      ,[Population]
	  , 2 as Code
	   FROM [Cities]
	   WHERE Country = 2


Запрос сейчас возвращает 4 записи.
Name Country Population Code
Город1 1 1000 1
Город1 2 500 2
Город2 1 2000 1
Город3 2 300 2


Необходимо, изменить запрос, чтобы в результирующей выборке не попадались одинаковые по наименованию города, т.е. в нашем случае должно быть:
Name Country Population Code
Город1 1 1000 1
Город2 1 2000 1
Город3 2 300 2


Подскажите, пожалуйста, как это сделать?
28 ноя 19, 16:41    [22027957]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос на исключение специфического дубликата  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Просто сделайте группировку по Городу.
select
    Name
  , sum(Population) as Population
from Cities
where Country in (1, 2)
group by Name
28 ноя 19, 16:50    [22027963]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос на исключение специфического дубликата  [new]
alexFV
Member

Откуда:
Сообщений: 331
Не, Population не надо суммировать. Упрощенно задача в следующем: во второй выборке (UNION) не должны попасть города из первой выборки.

Сообщение было отредактировано: 28 ноя 19, 16:54
28 ноя 19, 16:53    [22027968]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос на исключение специфического дубликата  [new]
msLex
Member

Откуда:
Сообщений: 8091
alexFV
Не, Population не надо суммировать. Упрощенно задача в следующем, во второй выборке (UNION) не должны попасть города из первой выборки.

not exists
28 ноя 19, 16:54    [22027970]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос на исключение специфического дубликата  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
with cteData
as (
	select
	    Name
	  , Country
	  , Population
	  , 1 as Code
	from Cities
	where Country = 1
	union all
	select
	    Name
	  , Country
	  , Population
	  , 2 as Code
	from Cities
	where Country = 2
) ,
cteNumbered
as (
	select *, row_number() over ( partition by Name order by Code ) as DupNum
	from cteData
)
select *
from cteNumbered
where DupNum = 1
28 ноя 19, 16:58    [22027972]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос на исключение специфического дубликата  [new]
alexFV
Member

Откуда:
Сообщений: 331
Владимир Затуливетер,
СПАСИБО! То, что нужно!
28 ноя 19, 17:10    [22027985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить