【问题标题】:Can I combine my two SQLite SELECT statements into one?我可以将我的两个 SQLite SELECT 语句合并为一个吗?
【发布时间】:2009-06-25 01:41:25
【问题描述】:

我有一个名为 posts 的 SQLite 表。一个例子如下所示。我想计算每月的收入和支出。

accId 日期 文本 金额 余额 ---------- ---------- ------------ ------ ---- ---------- 1 2008-03-25 Ex1 -64.9 3747.56 1 2008-03-25 Shop2 -91.85 3655.71 1 2008-03-26 Benny's -100.0 3555.71

对于收入我有这个疑问:

SELECT SUBSTR(date, 0,7) "month", total(amount) "income" FROM posts WHERE amount > 0 GROUP BY Month ORDER BY date;

效果很好:

月收入 ---------- ---------- 2007-05 4877.0 2007-06 8750.5 2007-07 8471.0 2007-08 5503.0

现在我需要费用,我可以使用条件amount < 0 重复第一条语句,但我想知道是否有一种优雅的方法可以在一个查询中同时获得收入和费用?

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    试试这样的

    select substr(date, 0,7) "Month",
           total(case when a > 0 then a else 0 end) "Income",
           total(case when a < 0 then a else 0 end) "Expenses"
    from posts
    group by month 
    

    【讨论】:

      【解决方案2】:

      查看UNION 语句(链接底部)。这将允许您组合两个查询的结果,通常采用以下形式:

      <SELECT_STATEMENT_1> UNION <SELECT_STATEMENT_2>
      

      【讨论】:

        【解决方案3】:

        不确定 SQL Lite 是否支持 CASE 语句,但如果支持,您可以这样做。

        SELECT SUBSTR(date, 0,7) "month"
        , total(CASE WHEN Amount > 0 THEN Amount ELSE 0 END) "income" 
        , -1 * total(CASE WHEN Amount < 0 THEN Amount ELSE 0 END) "expenses" 
        FROM posts 
        GROUP BY month 
        ORDER BY date;
        

        【讨论】:

        • 谢谢,如果将 END 添加到 CASE 语句中,这也有效。
        • 是的,在 SQLite 中你必须结束你的 CASE 语句 - (CASE WHEN Amount > 0 THEN Amount ELSE 0 END)
        猜你喜欢
        • 2014-06-18
        • 2013-04-13
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多