我有4张桌子:
经理,销售,SaleDetails,产品:
我想为每个经理检索: 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这是最优的吗?您能帮助我用更优化的查询来替换它吗?
查询必须返回结果:
发布于 2016-09-10 09:46:43
SELECT c.Name AS ManagerName
,s.SaleDate
,COUNT(p.ProductID)
FROM dbo.Products p
INNER JOIN dbo.SalesDetails sd ON sd.ProductID = p.ID
INNER JOIN dbo.Sales s ON sd.SaleID = s.ID
INNER JOIN dbo.Managers c ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name,sd.ProductID发布于 2016-09-10 10:59:08
正确的答案(正如我读到的问题)是:
SELECT c.Name AS ManagerName, s.SaleDate, COUNT(DISTINCT sd.ProductId)
FROM dbo.SalesDetails sd
dbo.Sales s
ON sd.SaleID = s.ID INNER JOIN
dbo.Managers c
ON c.ID = s.ConsultantID
GROUP BY s.SaleDate, c.Name;备注:
Products表,因为SalesDetails表具有产品信息。GROUP BY中。COUNT(DISTINCT)。https://stackoverflow.com/questions/39424721
复制相似问题