Подтвердить что ты не робот

Заявление о случаях в MySQL

Существует таблица tbl_transaction с

id INT(11) Primary Key
action_type ENUM('Expense', 'Income')
action_heading VARCHAR (255)
action_amount FLOAT

Можно ли получить результат, используя только SQL Query, перечисляющий всю сумму расходов в столбце Expense Amt и сумму дохода в столбце "Доход Amt", например:

ID        Heading         Income Amt       Expense Amt
1         ABC             1000             -
2         XYZ             -                2000

Я использую MySQL как базу данных. И я пытаюсь использовать оператор CASE.

Ура!

4b9b3361

Ответ 1

Да, что-то вроде этого:

SELECT
    id,
    action_heading,
    CASE
        WHEN action_type = 'Income' THEN action_amount
        ELSE NULL
    END AS income_amt,
    CASE
        WHEN action_type = 'Expense' THEN action_amount
        ELSE NULL
    END AS expense_amt

FROM tbl_transaction;

Как указывали другие ответы, MySQL также имеет функцию IF(), чтобы сделать это, используя более подробный синтаксис. Обычно я стараюсь избегать этого, потому что это SQL-специфическое расширение для SQL, которое обычно не поддерживается в других местах. CASE является стандартным SQL и гораздо более переносимым для разных движков баз данных, и я предпочитаю писать переносные запросы как можно больше, только с использованием расширений, зависящих от двигателя, когда переносная альтернатива значительно медленнее или менее удобна.

Ответ 2

MySQL также имеет IF():

SELECT 
  id, action_heading, 
      IF(action_type='Income',action_amount,0) income, 
      IF(action_type='Expense', action_amount, 0) expense
FROM tbl_transaction

Ответ 3

Попробуйте использовать IF(condition, value1, value2)

SELECT ID, HEADING, 
IF(action_type='Income',action_amount,0) as Income,
IF(action_type='Expense',action_amount,0) as Expense

Ответ 4

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

select 
  id
  ,action_heading
  ,case when action_type='Income' then action_amount else 0 end
  ,case when action_type='Expense' then expense_amount else 0 end
from tbl_transaction

Ответ 5

Еще одна вещь, о которой стоит помнить, - это два разных CASE файла с MySQL: один из них описывает то, что @cdhowie и другие описывают здесь (<) и что-то, что называется CASE, но имеет совершенно другой синтаксис и совершенно другую функцию, описанную здесь: https://dev.mysql.com/doc/refman/5.0/en/case.html

Неизменно, я сначала использую его, когда хочу другой.

Ответ 6

Надеюсь, это обеспечит вам правильное решение:

Синтаксис:

   CASE  
        WHEN search_condition THEN statement_list  
       [WHEN search_condition THEN statement_list]....
       [ELSE statement_list]  
   END CASE

Реализация:

select id, action_heading,  
   case when
             action_type="Expense" then action_amount  
             else NULL   
             end as Expense_amt,   
    case when  
             action_type ="Income" then action_amount  
             else NULL  
             end as Income_amt  
  from tbl_transaction;

Здесь я использую оператор CASE, поскольку он более гибкий, чем if-then-else. Он позволяет использовать несколько ветвей. А оператор CASE является стандартным SQL и работает в большинстве баз данных.