简体   繁体   English

不是单例函数

[英]not a single-group function in case statement

tab1
ID_P , SYN
 1      0
 2      0
 2      1
 2      0

tab2
ID_P , SYN
 2      1
 2      1
 4      0

select CASE WHEN COUNT(SYN) > 1 THEN '0' 
            WHEN COUNT(SYN) = 0 AND SYN > 0 THEN '0' 
            ELSE '1' END 
from (
select COUNT(SYN) as SYN
from tab1
where ID_P = 2 and SYN <> '0' 
union
select COUNT(SYN) as SYN
from tab2
where ID_P = 2 and SYN <> '0' ) 

What i want to verify is 我要验证的是

  1. if the returned result from the unions have more than one row then return '0' 如果联合返回的结果多于一行,则返回“ 0”
  2. if the returned result from the unions just contain one row and the only result is bigger that zero then return '0' 如果联合返回的结果仅包含一行并且唯一的结果大于零,则返回“ 0”

The problem occurs int the second statement, ORA-00937 not a single-group group function , How can i overcome this problem ? 问题出现在第二个语句ORA-00937不是单组功能中,我该如何克服这个问题? The result should be zero because there are rows containing '1'. 结果应该为零,因为有些行包含“ 1”。 Thanks in advance Best regards 预先感谢问候

Actually m confused a bit by what actually you are trying to achieve, Below example might help you out 实际上,我对您实际要实现的目标感到有些困惑,下面的示例可能会帮助您

  SELECT
  CASE
    WHEN COUNT(1) > 1
    THEN '0'
    WHEN COUNT(1) =1
    AND MAX(A.SYN)     > 0
    THEN '0'
    ELSE '1'
  END col1
FROM
  (SELECT COUNT(SYN) AS SYN
  FROM
    (SELECT 1 ID_P,0 SYN FROM DUAL
    UNION ALL
    SELECT 2 ID_P,0 SYN FROM DUAL
    UNION ALL
    SELECT 2 ID_P,1 SYN FROM DUAL
    UNION ALL
    SELECT 2 ID_P,0 SYN FROM DUAL
    )
  WHERE ID_P = 2
  AND SYN   <> '0'
  UNION
  SELECT COUNT(SYN) AS SYN
  FROM
    (SELECT 2 ID_P,1 SYN FROM DUAL
    UNION ALL
    SELECT 2 ID_P,1 SYN FROM DUAL
    UNION ALL
    SELECT 4 ID_P,0 SYN FROM DUAL
    )
  WHERE ID_P = 2
  AND SYN   <> '0'
  ) a;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM