Запрос вывода клиентов и сотрудников и их городов, где в каждом городе должен быть хотя бы один клиент и один сотрудник - PullRequest
0 голосов
/ 05 мая 2019

Я должен взять продавцов и покупателей и вывести их в одну колонку, указав их города и типы.

Моя проблема в том, что мне не нужно выводить клиентов, чьи города отсутствуют в таблице продавцов, и наоборот.

SELECT 
    ContactName, City, Type 
FROM
    (SELECT 
         'Seller' AS Type,
         ContactName, City
     FROM 
         [dbo].[Suppliers] t
     GROUP BY 
         City, ContactName
     UNION
     SELECT 
         'Customer',
         ContactName, City
     FROM 
         [dbo].[Customers] t
     GROUP BY 
         City, ContactName) t
GROUP BY 
    ContactName, City, Type

Результат:

| Ivan Ivanov  | Seller   | Moscow |
| Piotr Petrov | Seller   | Moscow |
| Ivan Romanov | Customer | Moscow |
| Johnny Bravo | Customer | London |  

(допустим, в Лондоне нет продавцов, поэтому этот столбец не должен существовать)

Ожидаемый результат: только столбцы с информацией, где в городе есть хотя бы один продавец и один клиент, сгруппированные по имени и городу для контакта

1 Ответ

0 голосов
/ 05 мая 2019

Это похоже на union all и exists:

SELECT DISTINCT c.ContactName, 'Customer' as type, c.City
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Sellers s WHERE s.city = c.city)
UNION ALL
SELECT DISTINCT s.ContactName, 'Seller' as type, s.City
FROM Sellers s
WHERE EXISTS (SELECT 1 FROM Customers c WHERE c.city = s.city);

Я не уверен, что SELECT DISTINCT действительно нужен - я не понимаю, почему в базовых таблицах есть дубликаты (хотя ContactName не совсем хороший столбец для уникальной идентификации). Тем не менее, ваш исходный запрос имеет GROUP BY, предполагая, что вы хотите удалить дубликаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...