如何编写可动态处理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;
输入数据
| studyid | enroll_flag | yearMo |
|---|---|---|
| 123 | NULL | 201301 |
| 123 | 1 | 201301 |
| 124 | 2 | 201301 |
| 124 | 1 | 201301 |
| 125 | NULL | 201301 |
| 125 | NULL | 201301 |
| 126 | NULL | 201301 |
| 123 | 8 | 201302 |
| 123 | 7 | 201302 |
| 124 | 13 | 201302 |
| 124 | 35 | 201302 |
| 125 | 490 | 201302 |
| 125 | 50 | 201302 |
| 126 | 51 | 201302 |
| 123 | 100 | 201303 |
| 123 | 100 | 201303 |
| 124 | 100 | 201303 |
| 124 | 100 | 201303 |
| 125 | 100 | 201303 |
| 125 | 100 | 201303 |
| 126 | 100 | 201303 |
预期输出
| studyid | 201301 | 201302 | 201303 |
|---|---|---|---|
| 123 | NULL | 8 | 100 |
| 123 | 1 | 7 | 100 |
| 124 | 1 | 35 | 100 |
| 124 | 2 | 13 | 100 |
| 125 | NULL | 50 | 100 |
| 125 | NULL | 490 | 100 |
| 126 | NULL | 51 | 100 |
内容的提问来源于stack exchange,提问作者Tanya Apurva
相关产品推荐
相关产品推荐

