Es gibt eine Tabelle ' tbl_transaction ' mit
id INT(11) Primary Key
action_type ENUM('Expense', 'Income')
action_heading VARCHAR (255)
action_amount FLOAT
Ist es möglich, ein Ergebnis zu erhalten, das nur die SQL-Abfrage verwendet, in der alle Ausgabenbeträge in der Spalte "Spesenamt" und der Einkommensbetrag in der Spalte "Income Amt" aufgeführt sind:
ID Heading Income Amt Expense Amt
1 ABC 1000 -
2 XYZ - 2000
Ich verwende MySQL als Datenbank. Und ich versuche die CASE-Anweisung zu verwenden.
Prost!
Ja so etwas:
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;
Wie andere Antworten gezeigt haben, hat MySQL auch die Funktion IF()
, um dies mit weniger ausführlicher Syntax zu tun. Ich versuche dies generell zu vermeiden, da es sich um eine MySQL-spezifische Erweiterung von SQL handelt, die anderswo normalerweise nicht unterstützt wird. CASE
ist Standard-SQL und viel portabler für verschiedene Datenbank-Engines. Ich ziehe vor, tragbare Abfragen so weit wie möglich zu schreiben, wobei ich nur Engine-spezifische Erweiterungen verwende, wenn die portable Alternative erheblich langsamer oder weniger bequem ist.
MySQL hat auch IF()
:
SELECT
id, action_heading,
IF(action_type='Income',action_amount,0) income,
IF(action_type='Expense', action_amount, 0) expense
FROM tbl_transaction
Versuchen Sie, IF(condition, value1, value2)
zu verwenden
SELECT ID, HEADING,
IF(action_type='Income',action_amount,0) as Income,
IF(action_type='Expense',action_amount,0) as Expense
Das sollte funktionieren:
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
Beachten Sie auch, dass es zwei verschiedene CASEs mit MySQL gibt: eine wie @cdhowie und andere hier beschrieben (und hier dokumentiert: http://dev.mysql.com/doc/refman/5.7/de/control -flow-functions.html # operator_case ) und etwas, das als CASE bezeichnet wird, aber eine völlig andere Syntax und eine völlig andere Funktion hat, hier dokumentiert: https://dev.mysql.com/doc/refman// de/case.html
Ich benutze immer eins zuerst, wenn ich das andere will.
Ich hoffe, dass Sie damit die richtige Lösung finden werden:
Syntax:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list]....
[ELSE statement_list]
END CASE
Implementierung:
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;
Hier verwende ich die CASE
-Anweisung, da sie flexibler ist als if-then-else
. Es erlaubt mehr als eine Branche. Die CASE
-Anweisung ist Standard-SQL und funktioniert in den meisten Datenbanken.