Il y a une table ' tbl_transaction ' avec
id INT(11) Primary Key
action_type ENUM('Expense', 'Income')
action_heading VARCHAR (255)
action_amount FLOAT
Est-il possible d'obtenir un résultat en utilisant uniquement SQL Query répertoriant tous les montants de dépenses dans la colonne Dépenses et le montant de revenus dans la colonne Revenus, comme:
ID Heading Income Amt Expense Amt
1 ABC 1000 -
2 XYZ - 2000
J'utilise MySQL comme base de données. Et j'essaie d'utiliser l'instruction CASE.
À votre santé!
Oui, quelque chose comme ça:
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;
Comme d'autres réponses l'ont souligné, MySQL dispose également de la fonction IF()
qui utilise une syntaxe moins détaillée. J'essaie généralement d'éviter cela, car il s'agit d'une extension SQL spécifique à MySQL qui n'est généralement pas prise en charge ailleurs. CASE
est le SQL standard et est beaucoup plus portable entre différents moteurs de base de données, et je préfère écrire autant que possible les requêtes portables, en n'utilisant que des extensions spécifiques au moteur lorsque l'alternative portable est considérablement plus lent ou moins pratique.
MySQL a aussi IF()
:
SELECT
id, action_heading,
IF(action_type='Income',action_amount,0) income,
IF(action_type='Expense', action_amount, 0) expense
FROM tbl_transaction
Essayez d'utiliser 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
Cela devrait fonctionner:
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
Une autre chose à garder à l'esprit est qu'il existe deux CASE différents avec MySQL: un exemple, décrit par @cdhowie et d'autres (et documenté ici: http://dev.mysql.com/doc/refman/5.7/en/control -flow-functions.html # opérateur_case ) et quelque chose appelé CASE, mais dont la syntaxe et la fonction sont complètement différentes, documentée ici: https://dev.mysql.com/doc/refman/5.0/ en/case.html
Invariablement, j'utilise d'abord l'un quand je veux l'autre.
J'espère que cela vous apportera la bonne solution:
Syntaxe:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list]....
[ELSE statement_list]
END CASE
La mise en oeuvre:
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;
Ici, j'utilise l'instruction CASE
car elle est plus flexible que if-then-else
. Il permet plus d'une branche. Et l'instruction CASE
correspond à SQL standard et fonctionne dans la plupart des bases de données.