对于oracle中的案例计数,不是单组组函数

时间:2017-08-09 07:31:46

标签: oracle count group-by case

我正在尝试将在MSSQL中运行的查询调整为Oracle,查询要大得多(这部分只是来自更大查询的字段)但我设法减少它以使它看起来更简单。

SELECT CASE WHEN COUNT(*) > 0 THEN COUNT(*) 
        ELSE (SELECT COUNT(*) FROM table2)
        END
FROM table1

我得到的错误是:

ora-00937 not a single-group group function

有人可以告诉我问题出在哪里或者我如何重新定义它?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用此查询:

SELECT CASE WHEN (SELECT COUNT(*) FROM table1) > 0 then (SELECT COUNT(*) FROM table1)
       ELSE (SELECT COUNT(*) FROM table2)
       END
FROM dual;

它仍然很丑,但它有效:)

<强>更新

解释它是如何运作的:

我们有2个案例:

  1. 如果表1中有记录,则显示记录的数量
  2. 如果table1为空,那么请给我一些记录 表2
  3. Dual是虚拟表。

答案 1 :(得分:0)

我认为NikNik的答案更清晰,但另一种解决方案是:

SELECT * 
FROM   (SELECT CASE 
                 WHEN Count(*) > 0 THEN Count(*) 
                 ELSE (SELECT Count(*) 
                       FROM   table2) 
               END 
        FROM   table1 
        GROUP  BY table1.primarykey1, 
                  table1.primarykey2) 
WHERE  ROWNUM = 1