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

如何编写可动态处理yearMo的SQL脚本(无需手动UNION)

动态处理yearMo值的SQL脚本需求

我需要编写一段能动态处理yearMo值的SQL脚本,无需为每个年月和行号手动编写UNION语句。目前的代码在输入3个yearMo值时可以正常运行并得到正确结果,但需要实现数据的动态获取。

现有代码

WITH NumberedRows AS (
    SELECT
        studyid,
        enroll_flag,
        yearMo,
        ROW_NUMBER() OVER (PARTITION BY yearMo, studyid ORDER BY studyid) AS rn
    FROM xyz -- 替换为实际表名
),
YearMoValues AS (
   SELECT DISTINCT yearMo,
    ROW_NUMBER() OVER (ORDER BY yearMo) AS rn
    FROM xyz
    Group by yearMo
    )

SELECT nr.studyid,
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 1 and ymv.rn=1 THEN nr.enroll_flag END) AS [201301],
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 1 and ymv.rn=2 THEN nr.enroll_flag END) AS [201302],
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 1 and ymv.rn=3 THEN nr.enroll_flag END) AS [201303]
FROM NumberedRows nr
JOIN YearMoValues ymv ON nr.yearMo = ymv.yearMo
GROUP BY nr.studyid,nr.rn
HAVING nr.rn = 1
UNION
SELECT nr.studyid,
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 2 and ymv.rn=1 THEN nr.enroll_flag END) AS [201301],
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 2 and ymv.rn=2 THEN nr.enroll_flag END) AS [201302],
    MAX(CASE WHEN nr.yearMo = ymv.yearMo AND nr.rn = 2 and ymv.rn=3 THEN nr.enroll_flag END) AS [201303]
FROM NumberedRows nr
JOIN YearMoValues ymv ON nr.yearMo = ymv.yearMo
GROUP BY nr.studyid,nr.rn
HAVING nr.rn = 2;

输入数据

studyidenroll_flagyearMo
123NULL201301
1231201301
1242201301
1241201301
125NULL201301
125NULL201301
126NULL201301
1238201302
1237201302
12413201302
12435201302
125490201302
12550201302
12651201302
123100201303
123100201303
124100201303
124100201303
125100201303
125100201303
126100201303

预期输出

studyid201301201302201303
123NULL8100
12317100
124135100
124213100
125NULL50100
125NULL490100
126NULL51100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:34:53