Заявление о случаях в 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.
Ура!
Ответы
Ответ 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 и работает в большинстве баз данных.