基于单列的Oracle查询需求:根据ENABLED状态判断ITEM状态
需求与解决方案
原始数据
ITEM LOC ENABLED 100 A1 Y 100 A2 Y 100 A3 N
目标输出
ITEM STATUS 100 INACTIVE
判定规则
- 只要某商品(ITEM)对应的任意一个仓库(LOC)的启用状态(ENABLED)为
N,则该商品的整体状态(STATUS)为INACTIVE - 只有当某商品对应的所有仓库启用状态均为
Y时,整体状态才为ACTIVE
SQL实现方案
方案一:使用EXISTS子查询
SELECT DISTINCT ITEM, CASE WHEN EXISTS ( SELECT 1 FROM your_table AS t2 WHERE t2.ITEM = t1.ITEM AND t2.ENABLED = 'N' ) THEN 'INACTIVE' ELSE 'ACTIVE' END AS STATUS FROM your_table AS t1;
方案二:使用聚合函数
利用字符排序特性(N的ASCII码小于Y),通过MIN()函数快速判断是否存在N:
SELECT ITEM, CASE MIN(ENABLED) WHEN 'N' THEN 'INACTIVE' ELSE 'ACTIVE' END AS STATUS FROM your_table GROUP BY ITEM;
内容的提问来源于stack exchange,提问作者Imran Hemani
相关产品推荐
相关产品推荐

