我有一个数据库表’ tbl_transaction ‘,其定义如下:
id INT(11) Primary Key action_type ENUM('Expense', 'Income') action_heading VARCHAR (255) action_amount FLOAT
我想生成两列:Income Amt和Expense Amt。
Income Amt
Expense Amt
是否可以仅使用SQL查询有条件地填充列,以使输出显示在正确的列中,具体取决于它是费用项目还是收入项目?
例如:
ID Heading Income Amt Expense Amt 1 ABC 1000 - 2 XYZ - 2000
我正在使用MySQL作为数据库。我正在尝试使用CASE语句来完成此任务。
干杯!
是的,像这样:
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()使用较少冗长语法的功能。我通常尝试避免这种情况,因为它是MySQL的特定于MySQL的扩展,其他地方通常不支持。 CASE是标准的SQL和更加便携跨越不同的数据库引擎,我喜欢写便携查询尽可能,只利用发动机的特定扩展,当便携式选择是 相当 慢或不太方便。
IF()
CASE