You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CASE WHEN按日期所属季度提取对应Metric_Type的Metric_Value值

问题原因

你之前将匹配逻辑写在了SELECT段的CASE表达式中,该语法仅用于调整返回字段的计算值,不会对数据源的行进行过滤,因此会返回全表所有行,仅对符合条件的行返回正确的Metric_Value,其余行返回0。
如果需要仅保留符合条件的行,需要将匹配规则放在WHERE条件中进行行过滤。

实现方案

首先明确季度和Metric_Type的映射规则,按照你给出的示例Q1对应v1,假设后续季度映射为Q2对应v1.2、Q3对应v1.3,可参考如下写法:

SELECT Date, Metric_Type, Metric_Value
FROM 你的表名
WHERE 
  (QUARTER(Date) = 1 AND Metric_Type = 'v1')
  OR (QUARTER(Date) = 2 AND Metric_Type = 'v1.2')
  OR (QUARTER(Date) = 3 AND Metric_Type = 'v1.3')
  -- 按需补充其他季度和版本的对应规则

如果你仅需要查询特定季度的匹配数据,比如仅查第一季度的对应数据,可直接简化为:

SELECT Date, Metric_Type, Metric_Value
FROM 你的表名
WHERE QUARTER(Date) = 1 AND Metric_Type = 'v1'

如果后续季度和版本的映射规则会持续更新,更推荐单独维护一张季度版本映射配置表,通过关联查询避免每次修改SQL硬编码规则,示例如下:

  1. 新建映射表quarter_metric_map,包含Quarter(季度数值)、Metric_Type(对应版本号)两个字段
  2. 关联查询SQL:
SELECT t.Date, t.Metric_Type, t.Metric_Value
FROM 业务表 t
INNER JOIN quarter_metric_map m 
  ON QUARTER(t.Date) = m.Quarter 
  AND t.Metric_Type = m.Metric_Type

后续版本更新只要维护映射表的数据即可,无需修改SQL代码。

提示:如果你的Date字段为字符串类型存储(示例中为dd/mm/yyyy格式),使用QUARTER函数前需要先转换为日期类型,比如MySQL中可替换为STR_TO_DATE(Date, '%d/%m/%Y'),其他数据库可对应使用日期转换函数处理。

内容的提问来源于stack exchange,提问作者Kaushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:08