Сгруппировать, чтобы найти разницу - PullRequest
0 голосов
/ 06 сентября 2010

У меня есть настольный стол

Car:

Id
Name
ProductionCountry

Containers :

ID (GUID)
CarId

Я хочу получить контейнеры, где автомобили из разных стран

Итак:

Cars:
1 BMW X5 DE
2 BMW X3 DE
3 AUDI A6 MX
4 AUDI A1 FR
5 VOLVO S40 FR

Containers
Guid1 1
Guid1 2
Guid1 3
Guid2 4
Guid2 5

Итак, в результате я получаю Guid1, потому что в этом контейнере находятся машины из разных стран.

Как написать запрос, чтобы получить его?

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Вопрос:

Как получить контейнер, содержащий автомобили из разных стран?

Ответ:

SELECT Containers.ID FROM Containers INNER JOIN Car ON Containers.CarId = Car.Id
GROUP BY Containers.ID
HAVING COUNT(DISTINCT ProductionCountry) > 1
GO

Как это работает?

Присоединяемся к таблицам вагонов на контейнерах по уникальному идентификатору вагона. Это дает нам информацию о том, какой идентификатор страны находится в каких контейнерах

Guid1 DE
Guid1 DE
Guid1 MX
Guid2 FR
Guid2 FR

Таким образом, мы группируем результат по идентификатору контейнера и считаем уникальные идентификаторы стран

Guid1 2
Guid2 1

На последнем шаге мы фильтруем результат, чтобы иметь только те контейнеры, в которых количество стран превышает единицу.

Guid1
1 голос
/ 06 сентября 2010

Я думаю (на данный момент у меня нет доступа к SQL, но я думаю, что-то вроде)

select id, count(productioncountry)
from (
       select distinct id, productioncountry 
       from container c inner join car on car.id = c.CarId) conts
group by id
having count(productioncountry) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...