如何在T-SQL中筛选所有子类型一致的OrderId
解决T-SQL筛选所有SubType值完全相同的OrderId问题
你的原查询问题在于:按OrderId和SubType分组后,会返回每个OrderId下存在的所有不同SubType,根本无法判断该OrderId的所有行是否共享同一个SubType,所以得不到预期结果。
以下是两种可行的解法:
解法1:先筛选符合条件的OrderId,再关联获取SubType
SELECT o.OrderId, o.SubType FROM Orders o INNER JOIN ( -- 先找出所有SubType唯一的OrderId SELECT OrderId FROM Orders GROUP BY OrderId HAVING COUNT(DISTINCT SubType) = 1 ) valid_orders ON o.OrderId = valid_orders.OrderId -- 去重,避免同一个OrderId返回多行相同的SubType GROUP BY o.OrderId, o.SubType;
解法2:直接分组筛选并返回SubType
SELECT OrderId, MAX(SubType) AS SubType -- 因为SubType唯一,MAX/MIN结果一致 FROM Orders GROUP BY OrderId -- 筛选条件:该OrderId下不同SubType的数量为1 HAVING COUNT(DISTINCT SubType) = 1;
核心逻辑是利用COUNT(DISTINCT SubType) = 1判断某个OrderId下的所有行SubType完全相同——如果不同值的数量是1,说明所有行的SubType都一致。
内容的提问来源于stack exchange,提问作者Ann Snow
相关产品推荐
相关产品推荐

