mysql - MySQL中的case语句

标签 mysql sql database case

我有一个名为“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 语句来完成此操作。

干杯!

最佳答案

是的,是这样的:

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 特定的 SQL 扩展,在其他地方通常不支持。 CASE 是标准 SQL,并且在不同的数据库引擎之间更可移植,我更喜欢尽可能编写可移植的查询,只有在可移植替代方案非常时才使用特定于引擎的扩展em> 更慢或更不方便。

关于mysql - MySQL中的case语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15265874/

相关文章:

php - Mysql 获取包含计数和日期之间的数据

sql - 用另一行的某些值更新每一行

内容中出现新行的 MySQL INTO OUTFILE 问题

c# - 我可以使用SQlite访问MySQL数据库吗

mysql - 我的带有游标的存储过程没有运行

sql - SQL查找彼此在1分钟内发生的重复记录

sql - 在azure sql表中设置身份关闭

python - 在 Rackspace 云数据库实例中创建用户时的主机参数

php - Laravel orwhere 和 whereBetween 查询不能一起工作

php - 从表中选择不在 php 数组查询中不起作用