如何编写SELECT语句从cad_changes表不同行生成指定计算结果?
解决方案:根据日期返回指定计算结果
嘿,这个需求其实很简单,用SQL里的CASE表达式或者UNION ALL就能搞定,具体选哪种取决于你想要的返回格式是多列展示还是多行展示,我给你两种方案参考:
方案1:按日期返回多列计算结果
如果希望每个符合条件的日期行,对应的计算结果放在不同的列里,可以用CASE分别生成每个计算列:
SELECT change_date, -- 第一个计算项:仅2018-03-01返回结果,其他日期返回NULL CASE WHEN change_date = '2018-03-01' THEN 83028302 - 88809433 ELSE NULL END AS calc_result_1, -- 第二个计算项:2018-03-01返回第二个结果,2018-03-13返回指定结果 CASE WHEN change_date = '2018-03-01' THEN 100148757 - 87869589 WHEN change_date = '2018-03-13' THEN 87869589 - 83028302 ELSE NULL END AS calc_result_2 FROM cad_changes WHERE change_date IN ('2018-03-01', '2018-03-13');
说明:
WHERE子句过滤出只包含目标日期的行,避免无关数据干扰- 每个
CASE分支对应一个计算逻辑,不符合条件的日期会返回NULL(你也可以改成其他默认值,比如0,根据需求调整)
方案2:将每个计算结果作为单独行返回
如果希望每个计算结果都单独占一行(比如2018-03-01会返回2行,2018-03-13返回1行),可以用UNION ALL拼接三个查询:
-- 2018-03-01的第一个计算结果 SELECT change_date, 83028302 - 88809433 AS calculation_result FROM cad_changes WHERE change_date = '2018-03-01' UNION ALL -- 2018-03-01的第二个计算结果 SELECT change_date, 100148757 - 87869589 AS calculation_result FROM cad_changes WHERE change_date = '2018-03-01' UNION ALL -- 2018-03-13的计算结果 SELECT change_date, 87869589 - 83028302 AS calculation_result FROM cad_changes WHERE change_date = '2018-03-13';
说明:
UNION ALL会保留所有行(包括重复的),如果你的表中同一个日期有多行数据,每个行都会生成对应的计算结果行- 如果你想每个日期只返回唯一的计算结果行,可以给每个子查询加
DISTINCT,或者用GROUP BY change_date
内容的提问来源于stack exchange,提问作者Ani Sevanyan
相关产品推荐
相关产品推荐

