没有正确计算OrderID

时间:2018-04-23 18:06:32

标签: sql-server-2008

我的样本数据

EmailAddress   CustomerID OrderID OrderDate
XYZ@gmail.com   123454    1244     04/11/2018
XYZ@gmail.com   123466    1249     04/15/2018  

我的数据仅限于emailaddress。 我有一个SQL查询,其中涉及Customers,Orders和Orderdetails表。我试图得到客户的total_ordered,但它没有给我正确的结果。但是,当我从我的查询中删除orderdetails表时,我得到了正确的数量。我不明白为什么会这样。我想要正确计算Total_Ordered列。现在它正在加倍客户的购买。任何帮助表示赞赏。

SELECT
Customers.EmailAddress,
COUNT(Orders.OrderID) as Total_Ordered,
COUNT(CASE WHEN od.ProductCode LIKE 'DSC%' THEN  od.ProductCode END ) as DscoRDERS
FROM Orders 
JOIN (
      SELECT
         Orderid,
          ProductCode
      FROM OrderDetails
      GROUP BY
OrderID,
      ProductCode
) od ON Orders.Orderid = od.Orderid
JOIN Customers ON Customers.Customerid = Orders.Customerid
WHERE
Orders.OrderDate BETWEEN ' 01/01/2018 00:00' AND GETDATE()
GROUP BY
Customers.EmailAddress

1 个答案:

答案 0 :(得分:0)

当您引入OrderDetails表时,您在结果集中为任何给定订单上的每个项目获取一行。当你计算Orders.OrderID时,当OrderDetails进入时,数字会膨胀。

尝试将该行更改为:

...
COUNT(DISTINCT Orders.OrderID) as Total_Ordered,
...