例如,如果下表是
SupId ItemId Status
1 1 Available
1 2 OOS
2 3 Available
3 4 OOS
3 5 OOS
4 6 OOS
5 7 NULL
我希望获取all items
OOS 或 NULL 的不同供应商。
一种解决方案是获取至少有一个活动项目的所有供应商(活动供应商),然后添加一个条款NOT IN
活动供应商来选择非活动供应商。
有没有更好的方法来实现相同的目标?
一种选择,使用聚合:
SELECT SupId
FROM yourTable
GROUP BY SupId
HAVING
SUM(CASE WHEN Status = 'OOS' OR Status IS NULL THEN 1 ELSE 0 END) = COUNT(*) AND
(MAX(Status) = 'OOS' OR COUNT(Status) = 0);
这假设您需要只有全部NULL
或全部OOS
状态的供应商。如果您只想限制这两个状态值,请使用以下命令:
SELECT SupId
FROM yourTable
GROUP BY SupId
HAVING SUM(CASE WHEN Status <> 'OOS' AND Status IS NOT NULL THEN 1 ELSE 0 END) = 0;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句