2016-12-26 3 views
0

У меня есть код SQL.MySQL вычитает из SUM в операторе CASE

SELECT DISTINCT SQL_CALC_FOUND_ROWS 
       sales.code as code, 
       SUM(CASE WHEN sales.type = 51 THEN sales.amount ELSE 0 END) AS amount, 
       sales.type as type 
       FROM sales 

Теперь дело в том, что мне нужно вычесть sales.amount от общей суммы ЕСЛИ sales.type! = 51 и sales.amount> 0. Как я мог это сделать? Думаю, мне нужен другой оператор CASE внутри первого после инструкции ELSE, но я не знаю, как это работает.

Как пример, если тип не 51, и он имеет sales.amount больше 0, тогда я должен вычесть его из суммы.

Спасибо.

ответ

3

Где находится select distinct? Используйте GROUP BY:

SELECT s.code as code, 
     SUM(CASE WHEN s.type = 51 THEN s.amount ELSE 0 END) AS amount 
FROM sales s 
GROUP BY s.code; 

Тогда ответ на ваш вопрос, чтобы изменить положение ELSE:

SELECT s.code as code, 
     SUM(CASE WHEN s.type = 51 THEN s.amount ELSE - s.amount 
      END) AS amount 
FROM sales s 
GROUP BY s.code;