2009-06-25 124 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> 
相關問題