找到最便宜的商店,其中包含所有要求的清单项目

时间:2014-07-18 12:58:40

标签: sql

我目前正在尝试使用纯T-SQL,而无需使用C#完成额外的工作,以找到与产品列表最便宜的商店匹配。

找到最便宜的匹配效果很好,但我的问题是找到的匹配(商店)不一定包含列表中的所有项目。

此操作所需的表格是: 超市 - 所有超市。 ListItems - 连接项目列表和产品的表格。 AvailProducts - 在产品和超市之间进行链接的表格。如果某个产品ID和超市ID不存在行,则表示超市根本没有该产品。这是保存产品价格的表格。

我目前的测试SQL语句应该返回最多5个超市,这些超市的订购产品从最便宜到最便宜的订购,看起来像这样:

SELECT TOP 5 AvailProducts.[SuperID], SUM(AvailProducts.[Price]) AS "Price" 
FROM AvailProducts, ListItems, Supermarkets 
WHERE ListItems.[ListID]=3 
AND AvailProducts.[ProductID]=ListItems.[ProductID] 
AND AvailProducts.[SuperID]=Supermarkets.[ID] 
AND (SELECT COUNT(*) FROM AvailProducts, ListItems WHERE AvailProducts.[ProductID]=ListItems.[ProductID] AND ListItems.[ListID]=3 AND AvailProducts.[SuperID]=)=(SELECT COUNT(*) FROM ListItems WHERE [ListID]=3)  
GROUP BY AvailProducts.[SuperID] 
ORDER BY SUM(AvailProducts.[Price])

底部的第三行应该计算超市中可用的列表项的数量,如果列表项的数量和这个超市中的可用项数相等,则只返回超市的ID。

但是,这不起作用,因为我无法在此声明中指定当前超市的ID。

0 个答案:

没有答案