MySQL if 列用 CASE 语句重新计算,然后别名相同的名称,如何引用别名?

标签 mysql

我正在使用 CASE 语句评估列,然后将其命名为与列相同的名称。然后我如何强制 MySQL 选择重新评估的值而不是原始值?

SELECT
store,
CASE 
        WHEN offer IN ("offer 1", "offer 2") THEN "books"
        ELSE offer
END AS offer,

DATE(datetime) as date,

concat(COALESCE(store, ""), COALESCE((select offer)," ")) as connector

FROM sales_1 ORDER BY datetime DESC

在上面的代码中,“concat”函数使用原始的“offer”值,而不是我在 CASE 语句中更改的值。 我知道我可以在 COALESCE(...) 中做另一个 CASE,但一定有更简单的方法。

最佳答案

问题出在 COALESCE((select Offer)。您没有从表中选择列 Offer。这在语法上是不正确的。

您已经提出了一种方法来实现预期结果。另一种方法是使用子查询,如下所示。

SELECT
    A.store,
    A.offer,
    A.`date`
    CONCAT(COALESCE(store, ""), COALESCE(A.offer," ")) AS connector
FROM
    (SELECT
       DISTINCT
       store,
       CASE WHEN offer IN ("offer 1", "offer 2") THEN "books"
            ELSE offer
       END AS offer,
       DATE(datetime) AS `date`
    FROM sales_1 
    ORDER BY `datetime` DESC) A;

关于MySQL if 列用 CASE 语句重新计算,然后别名相同的名称,如何引用别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55360006/

相关文章:

mysql聚合函数问题(如何将同一组内特定值前后的值相加)

php curl 获取 mysql 数据 - 只返回一行

mysql - 如何在不终止数据库的情况下使用 Gearman 进行文件处理?

javascript - Chart.js - 无法通过 PHP 从 MySQL 获取结果

mysqlimport 问题 "set @@character_set_database=binary"阻止加载 json 值

php mysql 在从数组插入 SQL 时添加正斜杠

cpanel - mysqldump后的sql文件在哪里可以找到

php - 将电子邮件正文存储在数据库中的最佳方式

php - 保存检索到的数据

javascript - 如何在 Laravel 5.4 中验证 POST 数据?