我需要编写一个连接许多查询的查询。它们由一个id连接。问题是,在其中一个查询中,我必须选择一个“single group function”值,并且我必须对ON子句求值,该子句必须使用第二个选定列,并且我无法添加该条件。我将编写比代码简单得多的示例:

Select frst.FirstResult, scnd.FirstResult
from(
    Select something AS FirstResult, ID_to_compare as SecondResult from table
    Where -- [...]
) frst

join(
    Select something AS FirstResult, ID_to_compare as SecondResult from table2
    Where -- [...]
) scnd
ON frst.SecondResult=scnd.SecondResult

join(
    Select something AS FirstResult, ID_to_compare as SecondResult from table3
    Where -- [...]
) trd
ON scnd.SecondResult=trd.SecondResult

-- [...]

join(
    Select single_group_function(params) AS FirstResult, ID_to_compare as SecondResult from table3
--This select cannot be done because of the group function cannot be executed
    Where -- [...]
) trd
ON svn.SecondResult=eit.SecondResult

我的问题是我需要比较每个select的“secondresult”,但是成员组不允许进行这样的查询。我试过“双人”桌,但它真的很乱,我不知道如何使用它。我也尝试过将它们加入到宏查询中,但是每个选择都足够大,以至于编写起来非常混乱。我从this post和很多其他地方得到了这些想法。你有什么建议来完成我的任务吗?
对于MT0的申请,一个最小的完整和可验证的问题是:
Select frst.FirstField, scnd.FirstField, frst.SecondField
from
(Select a1.DUMMY as FirstField, a2.DUMMY as SecondField
    from dual a1 join dual a2 on 1=1) frst
  join
(Select a1.DUMMY as FirstField, a2.DUMMY as SecondField
    from dual a1 join dual a2 on 1=1) scnd
  ON frst.SecondField = scnd.SecondField

  join
  (Select sum(a1.DUMMY) as FirstField, a2.DUMMY as SecondField
    from dual a1 join dual a2 on 1=1) trd
  ON trd.SecondField = scnd.SecondField
  ;

我想在这种情况下
frst.FirstField  scnd.FirstField  frst.SecondField
---------------- ---------------- --------------------
X                X                1

但是我得到了
Error en la línea de comandos : 11 Columna : 40
Informe de error -
Error SQL: ORA-00937: la función de grupo no es de grupo único
00937. 00000 -  "not a single-group group function"
*Cause:
*Action:

最佳答案

这是您的示例子查询:

Select sum(a1.DUMMY) as FirstField, a2.DUMMY as SecondField
from dual a1 join dual a2 on 1=1

那么你希望有一个结果行吗?这就是没有GROUP BY的聚合所做的。你会得到所有记录的和,但是在这个结果记录中显示哪个a2.DUMMY?这就是DBMS所抱怨的。
您可能需要的是每个a2.DUMMY的总和。所以按此列分组:
Select sum(a1.DUMMY) as FirstField, a2.DUMMY as SecondField
from dual a1 join dual a2 on 1=1
GROUP BY a2.DUMMY

10-04 10:50
查看更多