Oracle 10g中如何按Pat_no、Pat_id分组输出单行状态结果?
解决Oracle 10g中分组判断全量标志的问题
这个需求其实挺常见的,咱们可以借助Oracle的聚合函数快速实现分组后的统一判断,下面给你两种实用的方案:
方案一:利用MIN()或MAX()函数
字符在Oracle里是按ASCII码比较的,'N'的ASCII值(78)比'Y'(89)小。所以如果组内存在任意一条doc_flag为'N'的记录,MIN(doc_flag)就会返回'N';要是全组都是'Y',MIN()和MAX()都会返回'Y'。
对应的SQL语句:
SELECT Pat_no, Pat_id, MIN(doc_flag) AS doc_flag FROM your_table_name -- 替换成你的实际表名 GROUP BY Pat_no, Pat_id;
方案二:CASE WHEN结合条件计数
这种方式逻辑更直白,直接统计组内是否存在'N'的记录:
SELECT Pat_no, Pat_id, CASE WHEN COUNT(CASE WHEN doc_flag = 'N' THEN 1 END) > 0 THEN 'N' ELSE 'Y' END AS doc_flag FROM your_table_name -- 替换成你的实际表名 GROUP BY Pat_no, Pat_id;
效果验证
- 当组内所有
doc对应的doc_flag都是'Y'时,两种方案都会返回单行结果:Pat_no Pat_id doc_flag A1 123 Y - 只要组内有任意一条记录的
doc_flag是'N',结果就会变成:Pat_no Pat_id doc_flag A1 123 N
这两种方案在Oracle 10g里都能正常运行,你可以根据自己的习惯选一种用~
内容的提问来源于stack exchange,提问作者aim_thebest
相关产品推荐
相关产品推荐

