我有2张桌子


订票

id roomId checkinDate checkoutDate customerId
房间

roomId价格


我想总结每天的总金额,但我不知道如何查找和显示checkinDate和checkoutDate之间的差距总金额(checkinDate和checkoutDate应该是用户的输入,例如checkinDate ='2013-04- 01',checkoutDate ='2013-07-01')。我自己尝试,但只能从checkinDate执行。这是我所做的:

SELECT DATE(checkinDate), SUM(price)
FROM booking a INNER JOIN room b on a.roomID = b.roomNo
WHERE MONTH(checkinDate) = @month and YEAR(checkinDate) = @year
GROUP BY MONTH(checkinDate), DATE(checkinDate)


所以我得到了这样的结果

DATE(checkinDate)    SUM(price)
2013-06-01           3570
2013-06-04           650


但是我想要的应该是

DATE(checkinDate)    SUM(price)
2013-06-01           3570
2013-06-02           xxxx
2013-06-03           xxxx
2013-06-04           650


即使某天没有任何收入,也应显示0。

最佳答案

一种可能的解决方案是为您创建一个日历表,在每个日历中您可能会对感兴趣的每个日期都有一行,然后在该表中LEFT JOIN生成报告。您可以在该表中定义其他各种列,以帮助满足您的报告要求(例如,假日标志和期间指示器)。

Here is one of many网络帖子,其中包含有关创建此类表格的建议。在“ mysql日历表”上进行的网络搜索将显示许多其他内容。

例如,假设您有这样的日历表,则可以运行如下查询:

SELECT cal.calendar_date
     , SUM(b.price)
FROM calendar cal
LEFT OUTER JOIN booking a
on a.DATE(checkinDate) = cal.calendar_date
LEFT OUTER JOIN room b
on a.roomID = b.roomNo
WHERE cal.calendar_month = @month
  and cal.calendar_year = @year
GROUP BY cal.calendar_date


日历表确实非常有用。

10-05 23:54