2009-06-25 123 views
2

我有一个名为posts的SQLite表。一个例子如下所示。我想计算每月的收入和支出。我可以将两个SQLite SELECT语句合并为一个吗?

 
accId  date  text      amount  balance 
---------- ---------- ------------------------ ---------- ---------- 
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; 

它工作正常:

 
month  income  
---------- ---------- 
2007-05  4877.0 
2007-06  8750.5 
2007-07  8471.0 
2007-08  5503.0 

现在我所需要的费用,我可能导致的重复刚才的第一个语句与条件amount < 0,但我想知道是否有一个优雅的方式来在一个查询中获得收入和支出?

回答

6

尝试是这样的

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

不确定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; 
+1

谢谢,如果在CASE语句中增加END,这也会起作用。 – tiktuk 2009-06-25 02:15:39

+0

是的,在SQLite中,你必须结束你的CASE语句 - (当金额> 0那么金额ELSE 0 END时) – 2009-06-25 02:23:36

2

查找到UNION声明(链接的底部)。这将让你结合两种查询的结果,一般采用以下形式:

<SELECT_STATEMENT_1> UNION <SELECT_STATEMENT_2> 
相关问题