我有一些查询SQL语句,返回某些字段的总和,并且这些值与旗帜列相关联,旗帜列的值为“Y”或“N”。
是否有一种聚合函数,如果任何一个记录包含“Y”,则返回该标志列的真/假值?
您可以在 CASE
表达式中套用条件聚合:
CASE
WHEN COUNT(CASE WHEN column = 'Y' THEN 1 END) > 0 THEN 'true'
ELSE 'false'
END
select nvl(max(1),0) from your_table
where column = 'Y'
COALESCE()
而不是NVL()
,因为COALESCE()
是SQL标准的一部分,不像NVL()
那样隐式转换。它还将执行短路评估,在这种特定情况下并不那么相关。 - Ben
max()
?因为Y比N更高(我相信在所有编码中都是如此,但不确定...)但为什么选择PL/SQL?你是指真正的布尔值(在普通SQL中无法实现),还是仍然使用Y/N标志? - Alex Poole'true'
- Oracle没有布尔值。 - user330315