分组来寻找差异

时间:2010-09-06 11:42:33

标签: sql-server-2005

我有桌子表

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 个答案:

答案 0 :(得分:1)

我认为(我目前无法访问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

答案 1 :(得分:1)

<强>问题:

如何检索包含来自不同国家/地区的汽车的容器?

<强>答案:

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

因此,我们按容器ID对结果进行分组,并统计唯一的国家/地区ID

Guid1 2
Guid2 1

在最后一步中,我们过滤结果,使其只包含国家数量大于1的容器。

Guid1