2009-06-25 9 views
2

私はpostsというSQLiteテーブルを持っています。例を以下に示します。私は毎月の収入と経費を計算したいと思います。2つのSQLite SELECT文を1つにまとめることはできますか?

私はこのクエリを持っている収入のために
 
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が、私は1つのクエリで収入と支出の両方を取得するエレガントな方法があるのだろうかと思いますか?

答えて

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 
+0

ありがとう、これは完全に動作します。と非常にエレガントです:-)。 – tiktuk

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

+0

ええ、SQLiteであなたのCASEステートメントを終了する必要があります - ケース(Amount> 0 THEN Amount ELSE 0 END) –

+0

うん、それを修正しました。 – Kibbee

2

のようなものを試してみてはUNION声明(リンクの下)に確認してください。これにより、一般に次の形式の2つのクエリの結果を組み合わせることができます。

<SELECT_STATEMENT_1> UNION <SELECT_STATEMENT_2> 
関連する問題