【发布时间】:2016-11-20 22:20:20
【问题描述】:
为了解释我的问题,我将星型模式呈现如下:
SaleItem(事实)
SaleID(密钥)
ProductID(键)
数量
销售价格
销售(暗淡)
SaleID(密钥)
销售日期
产品(暗淡)
ProductID(键)
类别 ID (fk)
产品名称
类别(暗淡)
CategoryID(键)
类别名称
我想计算 2011 年 CategoryId 为 Only = 4 的 Sales (SaleID) 的数量。
我试过这样做:
SELECT COUNT(DISTINCT SaleItem.SaleID) AS [Number of Bread-Only 2011 Sales]
FROM Product INNER JOIN
SaleItem ON Product.ProductID = SaleItem.ProductID INNER JOIN
Sale ON SaleItem.SaleID = Sale.SaleID
WHERE (YEAR(Sale.SaleDate) = '2011') AND (SaleItem.ProductID IN
(SELECT ProductID
FROM Product
WHERE (CategoryID = '4')))
问题在于,我得到了 SaleID,其中 至少一个 ProductID 与 CategoryID=4 相关,如下所示:
但我希望所有相关的 ProductID 都与 CategoryID=4 相关或不计算在内。
更新解决方案
SELECT COUNT (X.SaleID) AS [Number of Bread-Only 2011 Sales] FROM
((SELECT DISTINCT SaleItem.SaleID
FROM Product INNER JOIN
SaleItem ON Product.ProductID = SaleItem.ProductID INNER JOIN
Sale ON SaleItem.SaleID = Sale.SaleID
WHERE (YEAR(Sale.SaleDate) = '2011') AND (SaleItem.ProductID IN
(SELECT ProductID
FROM Product
WHERE (CategoryID = '4'))))
EXCEPT
(SELECT DISTINCT SaleItem.SaleID
FROM Product INNER JOIN
SaleItem ON Product.ProductID = SaleItem.ProductID INNER JOIN
Sale ON SaleItem.SaleID = Sale.SaleID
WHERE (YEAR(Sale.SaleDate) = '2011') AND (SaleItem.ProductID IN
(SELECT ProductID
FROM Product
WHERE (CategoryID <> '4'))))) AS X
【问题讨论】:
标签: sql sql-server