Sql 如果值存在,则聚合函数返回true
我有一些SQL查询,它返回某些字段的总和,并且有一个与这些值相关联的标志列,可以是“Y”或“N”Sql 如果值存在,则聚合函数返回true,sql,oracle,aggregate,oracle12c,Sql,Oracle,Aggregate,Oracle12c,我有一些SQL查询,它返回某些字段的总和,并且有一个与这些值相关联的标志列,可以是“Y”或“N” 如果任何一条记录包含“Y”,是否有一个聚合函数将在此标志列上返回true/false?您可以将条件聚合包装在大小写表达式中: CASE WHEN COUNT(CASE WHEN column = 'Y' THEN 1 END) > 0 THEN 'true' ELSE 'false' END max()?因为Y排序高于N(我相信所有编码,但不是100%确定…),所以买为什么P
如果任何一条记录包含“Y”,是否有一个聚合函数将在此标志列上返回true/false?您可以将条件聚合包装在
大小写表达式中:
CASE
WHEN COUNT(CASE WHEN column = 'Y' THEN 1 END) > 0 THEN 'true'
ELSE 'false'
END
max()
?因为Y排序高于N(我相信所有编码,但不是100%确定…),所以买为什么PL/SQL,是指真正的布尔值(在普通SQL中不能有),还是仍然是Y/N标志?最大值(列)时的情况='Y'然后true else false end
@jarlh:您需要使用'true'
-Oracle没有布尔值我弄错了一点,如果任何一行包含'N',则需要返回true,因此我用MIN()尝试了它,它给出了所需的结果hanks,我正在争论这一点和@jarhl发布的解决方案。@atamata max/min同样有效,可能更快。然而,这一个更为通用,表达的意图更为清晰。同意这一点,可能是可读性决定了使用哪一个。已经说过,它将被提取到一个视图中,所以希望一旦它被写入,没有人需要再次查看它!我更喜欢COALESCE()
而不是NVL()
,因为COALESCE()
是SQL标准的一部分,不像NVL()
那样隐式转换。它还将执行短路评估,这与此特定情况无关。
select nvl(max(1),0) from your_table
where column = 'Y'