Могу ли я объединить два оператора SQLite SELECT в один? - PullRequest
2 голосов
/ 25 июня 2009

У меня есть таблица SQLite с именем posts.Пример показан ниже.Я хотел бы рассчитать ежемесячные доходы и расходы.

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, но мне интересно, есть ли элегантный способ получить как доход, так и расходы в одном запросе?

Ответы [ 3 ]

6 голосов
/ 25 июня 2009

Попробуйте что-то вроде этого

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 голосов
/ 25 июня 2009

Посмотрите на оператор UNION (внизу ссылки). Это позволит вам объединить результаты двух запросов, как правило, в виде:

<SELECT_STATEMENT_1> UNION <SELECT_STATEMENT_2>
2 голосов
/ 25 июня 2009

Не уверен, что 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...