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

如何基于app_code和year生成Flag字段?求SQL实现方案

需求实现说明

原数据表

IDorg_idapp_codeyear
1205EBB2016
2205EBB2016
3205LF2017
4205LF2017
5205LF2018
6205LF2018
7205LF2019
8205LF2019
9205EBB2020
10205EBB2020
11205LF2020
12205LF2020
13205EBB2021
14205EBB2021
15205LF2021
16205LF2021
17205LF2022
18205LF2022
19205EBB2022
20205EBB2022

预期输出表

IDorg_idapp_codeyearFlag
1205EBB20162
2205EBB20162
3205LF20171
4205LF20171
5205LF20181
6205LF20181
7205LF20191
8205LF20191
9205EBB20203
10205EBB20203
11205LF20203
12205LF20203
13205EBB20213
14205EBB20213
15205LF20213
16205LF20213
17205LF20223
18205LF20223
19205EBB20223
20205EBB20223

规则说明

  • 若某一年的所有app_code均为LF,则Flag为1;
  • 若某一年的所有app_code均为EBB,则Flag为2;
  • 若某一年同时存在LF和EBB两种app_code,则Flag为3。

SQL实现语句

方法一:使用窗口函数(无需子查询)

SELECT 
    ID,
    org_id,
    app_code,
    year,
    CASE
        -- 当年仅存在LF类型
        WHEN COUNT(DISTINCT app_code) OVER (PARTITION BY year) = 1 
             AND MAX(app_code) OVER (PARTITION BY year) = 'LF' THEN 1
        -- 当年仅存在EBB类型
        WHEN COUNT(DISTINCT app_code) OVER (PARTITION BY year) = 1 
             AND MAX(app_code) OVER (PARTITION BY year) = 'EBB' THEN 2
        -- 当年同时存在两种类型
        ELSE 3
    END AS Flag
FROM your_table_name;

方法二:使用子查询统计年度信息后关联

WITH year_app_stats AS (
    SELECT 
        year,
        COUNT(DISTINCT app_code) AS distinct_app_count,
        MAX(app_code) AS dominant_app
    FROM your_table_name
    GROUP BY year
)
SELECT 
    t.ID,
    t.org_id,
    t.app_code,
    t.year,
    CASE
        WHEN s.distinct_app_count = 1 AND s.dominant_app = 'LF' THEN 1
        WHEN s.distinct_app_count = 1 AND s.dominant_app = 'EBB' THEN 2
        ELSE 3
    END AS Flag
FROM your_table_name t
JOIN year_app_stats s ON t.year = s.year;

注:请将your_table_name替换为实际的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:45:46