SQL Server 2008 R2
这很难解释,但由于这是我雇主的一个项目,因此我不愿意提供实际细节。将场景放在一起:我们的数据库会跟踪车轮,它们的规格以及何时将它们放到车上。我需要为每辆车轮上的记录拉上记录。我的Cars
表中有一个字段告诉我这个条目是什么类型的汽车,我的CarTypes
表中的一个条目告诉我每种类型的汽车有多少个车轮,以及我的{{ {1}}表格可以放置车轮上可能放置的汽车上的每个可能位置。
我还需要生成第二个类似的查询,以返回缺少轮子的汽车列表。
目前,我的查询如下所示:
WheelPositions
这给我列出了所有连接到汽车的车轮,但我不知道如何修改它以过滤掉缺少车轮的车辆或在不完整的车上包含空置位置。
为了清楚起见,我正在描述两个单独的查询,并且正在寻找其中任何一个的帮助。
答案 0 :(得分:0)
CarTypes
有一个包含轮数的字段。您可以在聚合中使用它:
SELECT Cars.ID AS [CarID], CarTypes.Name AS [CarType]
FROM Cars LEFT JOIN
CarTypes
ON Cars.Type = CarTypes.Name LEFT JOIN
Wheels
ON Cars.ID = Wheels.CarID LEFT JOIN
WheelPositions
ON Wheels.Position = WheelPositions.Value AND Wheels.Shop = WheelPositions.Shop
WHERE Cars.Visible = 'True'
GROUP BY Cars.ID, CarTypes.Name, CarTypes.NumWheels
HAVING count(WheelPositions.Value) = CarTypes.NumWheels;
我不太确定如何判断车轮丢失了。这假设字段WheelPositions.Value
为NULL。