Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果值存在,则聚合函数返回true_Sql_Oracle_Aggregate_Oracle12c - Fatal编程技术网

Sql 如果值存在,则聚合函数返回true

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

我有一些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%确定…),所以买为什么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'