没有 else 或啥都不做的 SQL 查询案例?
Posted
技术标签:
【中文标题】没有 else 或啥都不做的 SQL 查询案例?【英文标题】:SQL query case when without else or do nothing?没有 else 或什么都不做的 SQL 查询案例? 【发布时间】:2019-11-27 08:19:41 【问题描述】:假设我在table_name_a
中有一些示例数据,如下所示:
code val_a val_b remark date
------------------------------------------
1 00001 500 0.1 111 20191108
2 00001 1000 0.2 222 20191109
3 00002 200 0.1 111 20191110
4 00002 400 0.3 222 20191111
5 00001 200 0.2 333 20191112
6 00001 400 0.1 444 20191113
我的预期输出如下:
code 111_a 111_b 222_a 222_b 333_a ....
--------------------------------------------
1 00001 500 .. .. .. ..
并且下面的 SQL 查询将包含 0
值,该值覆盖了正确的值,是否可以在没有 Else
的情况下进行查询或什么也不做?
SELECT code, date,
CASE WHEN t.remark='111' THEN t.val_a ELSE 0 END 111_a,
CASE WHEN t.remark='111' THEN t.val_b ELSE 0 END 111_b,
CASE WHEN t.remark='222' THEN t.val_a ELSE 0 END 222_a,
CASE WHEN t.remark='222' THEN t.val_b ELSE 0 END 222_b,
CASE WHEN t.remark='333' THEN t.val_a ELSE 0 END 333_a,
CASE WHEN t.remark='333' THEN t.val_b ELSE 0 END 333_b,
CASE WHEN t.remark='444' THEN t.val_a ELSE 0 END 444_a,
CASE WHEN t.remark='444' THEN t.val_b ELSE 0 END 444_b,
FROM table_name_a t
【问题讨论】:
您希望所有 00001 值都在一行中吗?完成预期结果,使其与示例表数据匹配。 【参考方案1】:您需要在此处使用带有旋转逻辑的MAX
,尽管您在正确的轨道上:
SELECT
code,
MAX(CASE WHEN remark = '111' THEN val_a END) 111_a,
MAX(CASE WHEN remark = '111' THEN val_b END) 111_b,
MAX(CASE WHEN remark = '222' THEN val_a END) 222_a,
MAX(CASE WHEN remark = '222' THEN val_b END) 222_b,
MAX(CASE WHEN remark = '333' THEN val_a END) 333_a,
MAX(CASE WHEN remark = '333' THEN val_b END) 333_b,
MAX(CASE WHEN remark = '444' THEN val_a END) 444_a,
MAX(CASE WHEN remark = '444' THEN val_b END) 444_b
FROM table_name_a
GROUP BY
code;
这里的逻辑是有效的,因为对于属于单个代码的每组记录,我们仅在某些条件下取最大值,在这种情况下,对于某些备注值。如果条件为假,则CASE
表达式将返回NULL
,然后MAX
将忽略它。
【讨论】:
嗨蒂姆,非常感谢,你真的拯救了我的一天,谢谢☕️☕️??pan> @TimBiegeleisen 不需要date
列?
@Moudiz 我猜不是;如果预计日期,那么 OP 还必须为此显示适当的数据。
@Moudiz 嘿,在我的示例中它需要date
列
嗨蒂姆,没有数据的其他数据将保存到None
或nan
,我可以用0
保存它们吗?以上是关于没有 else 或啥都不做的 SQL 查询案例?的主要内容,如果未能解决你的问题,请参考以下文章
添加一个没有 Thread.sleep 的延迟和一个啥都不做的 while 循环
Netcool/OMNIbus SQL 过程没有运行\啥都不做
使用来自firestore数据库的geoflutterfire查询结果,使用flutter应用程序返回null或啥都没有,但语法没有错误