2015-07-27 3 views
0

У меня есть таблица транзакций и вы хотите вычислить ее по типу транзакции. Как?Как SQL SUM с условием

Таблица:

id | amount | type 
-------------------- 
01 | 230 | IncomingTransfer 
02 | 100 | OutcomingTransfer 
03 | 20  | IncomingTransfer 

Логика:

SELECT SUM(amount) 
IF IncomingTransfer 
    + 230 
    + 20 
ELSE IF OutcomingTransfer 
    - 100 

Total amount: +150 

ответ

6

AS просто, как мой sqlfiddle показывает:

select 
sum(CASE WHEN type = 'IncomingTransfer' THEN amount ELSE -amount END) as totalsum 
from t; 
+0

Блестящий ... не понимал, что вы можете это сделать. –

+0

Да, очень простой и полезный .. на самом деле я думаю, что он был введен обратно в стандарт SQL-92. – MrSimpleMind

+0

Вот и все! Спасибо. – Ricardo

0

Я хотел бы использовать:

SELECT Amount = SUM(CASE WHEN Type = 'OutcomingTransfer' then (Amount*-1) 
        ELSE Amount END) 
    FROM <Table> 
    GROUP BY <Grouping Field> 
+0

Нет необходимости в GROUP BY - использование этого просто ломает вещи в этом случае –

+0

Вы правы. Хотя я не был уверен, есть ли дополнительные поля в этом конкретном вопросе (StoreId, Date и т. Д.) Или если общая сумма была желательной - поэтому, чтобы быть тщательным, я включил группу By. – ander2ed

1
SELECT SUM(amount) FROM (
    SELECT CASE WHEN type='IncomingTransfer' 
     THEN +amount 
     ELSE -amount 
     END as amount 
    FROM MyTable 
) as data