我正在使用 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/