mysql - MySQL如果用CASE语句重新评估列然后别名相同的名称,如何引用别名?
问题描述
我正在使用 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)
. 您正在从无表中选择列报价。那在语法上是不正确的。
您已经提出了一种实现预期结果的方法。另一种方法是使用子查询,如下所示。
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;
推荐阅读
- go - Golang 子项目或子模块依赖
- javascript - 无法在 Angular 10 的 Http GET 方法中发送请求正文
- c++ - 分配任务给玩家挂起程序
- c# - 在 C# 中创建 MS Teams 团队 - 多个所有者
- angular - Angular 10 延迟加载和路由不起作用
- java - 杰克逊将“简单类型”反序列化为枚举
- angular - 如何在我的角度项目中为 signalR 3.0 设置自定义 withAutomaticReconnect
- tooltip - ggplotly 工具提示显示数据两次
- node.js - 用于检查每个冷却时间的冷却命令 (Discord.js)
- css - 在 div 中调整 Next.js Image 组件的大小