SQL Server 2019中如何筛选符合特定OrderType数量的OrderGroup?
解决方案
SQL Server 2019完全支持实现这个需求,你可以通过在HAVING子句中结合COUNT()和CASE表达式,精准统计特定订单类型的数量,从而筛选出符合条件的OrderGroup。
正确的SQL语句
SELECT OrderGroup FROM dbo.[Order] orders GROUP BY orders.OrderGroup HAVING COUNT(CASE WHEN orders.OrderType = 3845 THEN 1 END) = 2 AND COUNT(CASE WHEN orders.OrderType = 5188 THEN 1 END) = 1 ORDER BY orders.OrderGroup
代码说明
COUNT(CASE WHEN orders.OrderType = 3845 THEN 1 END):仅统计当前分组中OrderType等于3845的记录数——当条件不满足时CASE返回NULL,而COUNT()会忽略NULL值,因此得到的是该类型的精准数量。- 第二个
COUNT(CASE...)逻辑一致,用于统计OrderType为5188的记录数,等于1即符合要求。
可选补充(排除其他订单类型)
如果要求OrderGroup中只能包含3845和5188这两种订单类型,不能有其他类型,可以在HAVING中额外添加条件:
HAVING COUNT(CASE WHEN orders.OrderType = 3845 THEN 1 END) = 2 AND COUNT(CASE WHEN orders.OrderType = 5188 THEN 1 END) = 1 AND SUM(CASE WHEN orders.OrderType NOT IN (3845, 5188) THEN 1 ELSE 0 END) = 0
内容的提问来源于stack exchange,提问作者Vaccano
相关产品推荐
相关产品推荐

