2014-01-03 5 views
2

Я пытаюсь создать запрос, который рассчитывает кредит и дебет для каждого месяца. значения находятся в столбце SUM, и есть поле для каждой записи, которое говорит, что это кредит или дебет (ex_type). Мне удалось получить общую сумму всех полей (хотя это тоже не правильно, потому что я просто суммирую все значения независимо от того, является ли это кредитом или дебетом).SQL SUM значения, где выполняются 2 условия

SELECT sum(sum) as total FROM acc where month='$month' 

Но я не могу понять, для сделать это для кредитных и дебетовых

Таким образом, чтобы подвести итог ... Я хочу иметь следующие два запроса, объединенные в один.

1. Select sum(sum) as Debit from acc where ex_type='Debit' and month='$month' 
2. Select sum(sum) as Credit from acc where ex_type='Credit' and month='$month' 

Итак, любая помощь очень ценится.

+1

Является ли этот mysql или sql-server? Вы хотите вернуть одно значение (всего) или три (Дебет, Кредит, Итого)? – SteveB

ответ

5

Попробуйте это CASE

Select sum(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit, 
sum(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit FROM ... 
+1

Это сработало отлично ... Спасибо большое – lStoilov

1

Это должно работать:

Select sum(d.sum) as Debit, 
    (Select sum(c.sum) from acc c where c.ex_type='Credit' and c.month='$month') as Credit 
from acc d where d.ex_type='Debit' and d.month='$month' 

Однако, если вы поставляете более подробную информацию о других областях можно внутреннее соединение на одной и той же таблицы, и это может быть немного более эффективным ,

0
SELECT 
    SUM(sum) as total 
    SUM(IF(ex_type='Debit',sum,0)) Debit 
    SUM(IF(ex_type='Credit',sum,0)) Credit 
FROM acc 
WHERE month='$month' 
1

Может дублировать сообщение:

SUM() based on a different condition to the SELECT

Попробуйте это:

Select 
    SUM(CASE WHEN ex_type='Debit' THEN `sum` ELSE 0 END) as Debit, 
    SUM(CASE WHEN ex_type='Credit' THEN `sum` ELSE 0 END) as Credit 
FROM acc 
Where etc... 
+0

Я видел этот пост, но он немного другой, я думаю – lStoilov

1

Я не эксперт в MySQL, но вы можете попробовать следующее

SELECT 
    SUM(CASE WHEN ex_type='Debit' THEN sum ELSE 0 END CASE) as SumOfDebit, 
    SUM(CASE WHEN ex_type='Credit' THEN sum ELSE 0 END CASE) as SumOfCredit, 
FROM acc 
WHERE 
    month = '$month' 

MySQL reference 5.0 имеет дело с утверждением СЛУЧАЯ, если это не работает, как ожидалось

0

Самым простым (и прохладным) способом является:

SELECT 
    SUM((ex_type='Debit') * sum) Debit, 
    SUM((ex_type='Credit') * sum) Credit, 
FROM acc 
WHERE month = '$month' 

Это работает, потому что в MySQL, правде есть 1 и фальшь 0 .

Смежные вопросы