【发布时间】:2016-09-10 09:37:30
【问题描述】:
我有这 4 张桌子:
经理、销售、销售详情、产品:
- 经理:ID、姓名
- 销售:ID、ManagerID、SaleNO、SaleDate
- SaleDetails:ID、SaleID、ProductID、数量
- 产品:ID、名称、价格
我想为每个经理检索:SaleDate 和唯一产品计数;
我的选择如下所示:
;WITH cte
AS
(
SELECT sd.SaleID, sd.ProductID FROM dbo.Products p
INNER JOIN dbo.SalesDetails sd ON sd.ProductID = p.ID
GROUP BY sd.SaleID, sd.ProductID
)
SELECT
c.Name AS ManagerName
,s.SaleDate
,COUNT(ct.ProductID) AS ProductCount
FROM cte ct
INNER JOIN dbo.Sales s ON ct.SaleID = s.ID
INNER JOIN dbo.Managers c ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name
这是最优的吗?你能帮我用更优化的查询替换它吗
- 经理:[ID = 1,姓名 = John;]
- 销售:[ID = 1,ManagerID = 1,SaleNO = 0015,SaleDate:2016-09-08],[ID = 2,ManagerID = 1,SaleNO = 0016,SaleDate:2016-09-09]李>
- SaleDetails: [ID = 1, SaleID = 1, ProductID = 1, Quantity = 2], [ID = 2, SaleID = 1, ProductID = 1, Quantity = 4], [ID = 3, SaleID = 1, ProductID = 2, Quantity = 3], [ID = 4, SaleID = 2, 产品 ID = 1,数量 = 3]
- 产品:[ID = 1,名称 = Sony],[ID = 2,名称 = 三星]
查询必须返回结果:
- ManagerName = John,SaleDate = 2016-09-08,ProductCount = 2
- ManagerName = John,SaleDate = 2016-09-09,ProductCount = 1
【问题讨论】:
-
您的查询是否有效,您是否要求替代方案?如果您正确设置了索引,则这些连接可能会非常有效地运行。
-
是的,我想写一个替代查询。此查询有效
-
@www1986 你能把数据和预期结果发给你吗??
-
@JibinBalachandran 我编辑了我的帖子,你可以查看
标签: sql sql-server