如何简化DB2/400 SQL查询以验证仓库C和D是否位于同一城市?
简化验证仓库C和D是否同城市的DB2/400 SQL实现
需求:确认仓库C和D是否位于同一城市,原SQL返回值为1时表示二者处于同一城市。
原表结构
City Warehouse 1 A 1 B 2 C 2 D 3 E 3 F
原有SQL实现
WITH subquery AS( SELECT DISTINCT WHM.City FROM WHM WHERE WHM.Warehouse = 'C' or WHM.Warehouse ='D' GROUP BY WHM.City ORDER BY WHM.City ) SELECT count(*) FROM subquery
简化实现方案
方案1:直接统计唯一城市数量
去掉多余的CTE、GROUP BY和ORDER BY,用COUNT(DISTINCT)一步完成:
SELECT COUNT(DISTINCT City) FROM WHM WHERE Warehouse IN ('C', 'D')
逻辑:筛选出仓库C和D的所有记录,直接统计其中不同城市的数量,结果为1则说明二者同属一个城市。
方案2:直接返回明确的同城市标识
如果需要更直观的结果(1表示同城市,0表示不同),可以用CASE语句封装:
SELECT CASE WHEN COUNT(DISTINCT City) = 1 THEN 1 ELSE 0 END AS SameCity FROM WHM WHERE Warehouse IN ('C', 'D')
方案3:通过最大/最小城市值比较判断
利用同城市时最大、最小城市值必然相等的特性,性能更优:
SELECT CASE WHEN MAX(City) = MIN(City) THEN 1 ELSE 0 END AS SameCity FROM WHM WHERE Warehouse IN ('C', 'D')
内容的提问来源于stack exchange,提问作者mortimer
相关产品推荐
相关产品推荐

