MySQL中的Case语句

Pra*_*uja 56 mysql sql database case

我有一个名为' tbl_transaction ' 的数据库表,其定义如下:

id INT(11) Primary Key
action_type ENUM('Expense', 'Income')
action_heading VARCHAR (255)
action_amount FLOAT
Run Code Online (Sandbox Code Playgroud)

我想生成两列:Income AmtExpense Amt.

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

例如:

ID        Heading         Income Amt       Expense Amt
1         ABC             1000             -
2         XYZ             -                2000
Run Code Online (Sandbox Code Playgroud)

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

干杯!

cdh*_*wie 137

是的,像这样:

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;
Run Code Online (Sandbox Code Playgroud)

正如其他答案所指出的那样,MySQL还具有IF()使用较少详细语法执行此操作的功能.我通常会尽量避免这种情况,因为它是SQL特有的MySQL扩展,通常在其他地方不受支持. CASE是标准的SQL,并且在不同的数据库引擎中更容易移植,我更喜欢尽可能地编写可移植查询,只有当便携式替代方案相当慢或不方便时才使用特定于引擎的扩展.


Bar*_*chs 21

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
Run Code Online (Sandbox Code Playgroud)


Rih*_*iho 8

尝试使用 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
Run Code Online (Sandbox Code Playgroud)