【发布时间】:2010-04-19 19:28:23
【问题描述】:
以下查询返回销售额月份的值,但不返回销售额为零的月份的值:
SELECT DATE_FORMAT(O.OrderDate, "%b, %Y") AS MonthYear, SUM(O.Total * C.Rate) AS Sales
FROM (Orders O INNER JOIN OrdersStates OS ON O.OrderID = OS.OrderID)
INNER JOIN Users U ON U.UserID = O.UserID
INNER JOIN UsersDescription UD ON U.UserID = UD.UserID
INNER JOIN States S ON S.StateID = OS.StateID INNER JOIN Currencies C ON O.Currency = C.Abb
WHERE O.OrderDate >= '2009-10-01 00:00:00' AND O.OrderDate < '2010-04-19 23:59:59'
GROUP BY MonthYear ORDER BY MonthYear
目标是让它在没有销售的月份返回零值。任何人都可以看到缺少什么吗?
提前谢谢你,
奥维尔
【问题讨论】:
-
因为您的数据中不存在日期,您需要构建一个日期值列表,并将 ORDERS 表左连接到该列表...
-
如果没有销售,该字段是空还是零?
-
如果我没看错,这里有一个最近的类似问题stackoverflow.com/questions/2651249/…
-
我不做 MySQL,所以我不想发布答案,但是在 TSql 中,我们会做类似
Sum(ISNULL(O.Total, 0) * ISNULL(C.Rate, 0)) as Sales