错误 ORA-00979:在查询周围使用括号时不是 GROUP BY 表达式

问题描述 投票:0回答:1

我有下面的查询(实际上用作更大查询集的派生表),当我使用外括号运行下面的查询时,我收到 ORA-00979 错误,但是如果我运行查询without外括号运行良好。

            (  SELECT A.INVENTORY_ITEM_ID
                      ,C.SUBINVENTORY_CODE,                         
                      TO_CHAR(MAX(B.COST_DATE)) COST_DATE,
                      to_char(B.TRANSACTION_COST,'FM99990.90') TRANSACTION_COST
                  FROM CST_ONHAND_V A,
                       CST_ITEM_COST_HISTORY_V B,
                       CST_TXN_LAYER_DTLS_V C
                 WHERE 1=1
                   AND A.INVENTORY_ITEM_ID= :p_inv_num
                   AND A.REC_TRXN_ID=B.TRANSACTION_ID
               
                   AND A.COST_ORG_ID = B.COST_ORG_ID
                   AND A.COST_BOOK_ID = B.COST_BOOK_ID
                   AND A.INVENTORY_ITEM_ID=B.INVENTORY_ITEM_ID          

                GROUP BY  A.INVENTORY_ITEM_ID
                          ,C.SUBINVENTORY_CODE
                          ,to_char(B.TRANSACTION_COST,'FM99990.90')
                    
              ORDER BY B.COST_DATE DESC NULLS LAST  )
sql oracle
1个回答
0
投票

但是,如果我运行不带外括号的查询,它运行得很好

我真的很怀疑。这是使用

all_objects
表的查询问题的简化可重现示例:

select o.owner, max(o.object_id) as object_id
from all_objects o
group by o.owner
order by o.object_id;

这将返回

not a GROUP BY expression
,因为
o.object_id
指的是表列,而不是所选输出中的第 2 列。

如果您只是从最后一行删除表别名,它就可以正常工作,因为现在

object_id
指的是结果中的第 2 列:

select o.owner, max(o.object_id) as object_id
from all_objects o
group by o.owner
order by object_id;

在您的示例中,您应该从

B.
中删除
B.COST_DATE
,将最后一行更改为:

ORDER BY COST_DATE DESC NULLS LAST  )

正如 Thorsten 在评论中提到的,避免创建与表中列同名的列别名是一个很好的做法,以避免这样的混淆。

© www.soinside.com 2019 - 2024. All rights reserved.