【发布时间】:2014-03-28 14:03:03
【问题描述】:
我在使用 SQL 查询时遇到了困难。我正在使用 sqlite。
我有一张桌子expenses。我正在尝试使用CASEstatement 来选择和求和值。以下是一些示例数据:
这是没有得到我想要的查询...
SELECT e.category,
CASE
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
WHEN e.schedule = 'Daily' THEN SUM(e.amount)*28.000000
WHEN e.schedule = 'Mon - Fri' THEN SUM(e.amount)*20
WHEN e.schedule = 'Weekly' THEN SUM(e.amount)*4.000000
WHEN e.schedule = 'Every 4 Weeks' THEN SUM(e.amount)*1.083333333333
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)*1
ELSE 0
END
AS totalValue FROM expenses e GROUP BY e.category ORDER BY e.category
下面是查询返回的图片。
我希望看到Housing 420 的总价值,这是因为category 为“Housing”的三个记录,其中一个的schedule 为“None”(记录 id 2) 并于 1 月创建。另外两个(记录 10 和 16)的 schedule 为每月。在我的CASE 中,我尝试只选择created_at 大于2 月1 日的时间表:
WHEN e.schedule ='None' AND e.created_at > '2014-02-01 00:00:00 +0000' THEN SUM(e.amount)
或者使用“无”以外的计划值,在这种情况下:
WHEN e.schedule = 'Monthly' THEN SUM(e.amount)
不幸的是,我得到了 495 (300 + 120 + 75) 的结果。如果找到符合案例陈述的记录,它会将所有记录与特定的category 相加!
请你帮我重写案例,以便我得到我正在寻找的结果。
【问题讨论】:
标签: sql sqlite select sum case