如何基于其他列值汇总表格?求实现指定决策汇总逻辑的Azure SQL查询语句
如何用Azure SQL实现决策表的聚合判断?
嘿,作为SQL新手碰到这种需要按分组做逻辑判断的需求很正常,我来一步步帮你解决这个问题!
先明确需求背景
原始决策表数据
Id decision 1 NULL 1 NULL 1 yes 1 NULL 2 no 2 no 2 no 3 yes 3 no 3 yes
期望输出结果
Id decision 1 Decision Pending 2 no 3 yes
核心规则
- 规则1:如果某个Id对应的任意
decision值是NULL,最终决策设为"Decision Pending"(比如Id 1) - 规则2:如果某个Id的
decision没有NULL,且存在至少一个yes,最终决策设为"yes"(比如Id 3) - 规则3:如果某个Id的
decision没有NULL,且所有值都是no,最终决策设为"no"(比如Id 2)
对应的Azure SQL查询语句
下面是完全符合需求的查询代码,记得把YourTableName替换成你实际的表名:
SELECT Id, CASE -- 优先判断是否存在NULL(*规则1优先级最高*) WHEN COUNT(CASE WHEN decision IS NULL THEN 1 END) > 0 THEN 'Decision Pending' -- 再判断是否有yes(*规则2*,此时已排除有NULL的情况) WHEN COUNT(CASE WHEN decision = 'yes' THEN 1 END) > 0 THEN 'yes' -- 剩下的就是全no的情况(*规则3*) ELSE 'no' END AS decision FROM YourTableName GROUP BY Id;
代码逻辑拆解(帮新手理解)
GROUP BY Id:把表中相同Id的行归为一组,这样我们就能针对每个单独的Id做判断。- 第一个
CASE WHEN:用嵌套的CASE配合COUNT,统计当前Id分组里decision为NULL的行数。如果数量大于0,说明该组存在NULL,直接返回Decision Pending(规则1优先级最高)。 - 第二个
CASE WHEN:同样用COUNT统计当前分组里decision为yes的行数。能走到这一步说明该组已经没有NULL了,只要有至少一个yes,就返回yes(规则2)。 ELSE 'no':前面两个条件都不满足的话,意味着该组既没有NULL,也没有yes,那所有值必然都是no,返回no即可(规则3)。
内容的提问来源于stack exchange,提问作者Diksha Manchanda
相关产品推荐
相关产品推荐

