一尘不染

MySQL中的案例陈述

mysql

我有一个数据库表’ tbl_transaction ‘,其定义如下:

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

我想生成两列:Income AmtExpense Amt

是否可以仅使用SQL查询有条件地填充列,以使输出显示在正确的列中,具体取决于它是费用项目还是收入项目?

例如:

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

我正在使用MySQL作为数据库。我正在尝试使用CASE语句来完成此任务。

干杯!


阅读 270

收藏
2020-05-17

共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()使用较少冗长语法的功能。我通常尝试避免这种情况,因为它是MySQL的特定于MySQL的扩展,其他地方通常不支持。
CASE是标准的SQL和更加便携跨越不同的数据库引擎,我喜欢写便携查询尽可能,只利用发动机的特定扩展,当便携式选择是 相当 慢或不太方便。

2020-05-17