2014-03-12 120 views
1

我的SQL查询如下:ORACLE GROUP BY错误

SELECT 
    oh.ORDER_NUMBER, oh.CREATED_TS, stat.STATE, stat.TIMESTAMP 
FROM 
IMPL_OH_ORDER_HEADER oh, 
SNCR_ORDER_DISPOSITION stat, 
SNCR_ORDER_DISP_HEAD stathead, 
IMPL_CUST_ACCOUNT cust 
WHERE 
stat.DISP_TRANSACTION_ID=stathead.DISP_TRANSACTION_ID 
and stathead.TRANSACTION_ID=oh.TRANSACTION_ID 
and oh.ACCOUNT_ID=cust.ACCOUNT_ID 
and stat.CATEGORY=100 
and oh.USER_ID='a' 
and cust.ACCOUNT_NUM='123' 
GROUP BY oh.ORDER_NUMBER 
ORDER BY stat.TRX_SEQ DESC; 

这是给下面的错误:ORA-00979: not a GROUP BY expression

如果删除了GROUP BY表达,我没有得到这个错误。

什么是正确的GROUP BY语法?

研究:谷歌搜索说,如果使用AGGREGATE函数,我应该在GROUP BY子句中使用聚合函数未使用的所有字段。所以我试图将GROUP BY表达式修改为GROUP BY oh.ORDER_NUMBER, oh.CREATED_TS, stat.TIMESTAMP, stat.STATE

但是我收到了同样的错误。

请帮忙。

+0

当没有必要groupby你为什么这样做? – SriniV

回答

2

由于STAT.TRX_SEQ中的排序为列表,您会收到错误消息。

如果通过子句连同为了通过子句中使用组,则必须任一顺序由列在其上分组或上的汇总值。

此规则也适用于选定的值:它们是组合函数或集合函数(或伪列)的一部分。

+0

更改为以下内容:GROUP BY oh.ORDER_NUMBER ORDER BY 1 DESC;'还有同样的错误 – Srihari

+0

谢谢。以下查询处理了'GROUP BY oh.ORDER_NUMBER,oh.CREATED_TS,stat.TIMESTAMP,stat.STATE ORDER BY 1,4 DESC;' – Srihari

0

你可以试试这个,看看?

SELECT OH.ORDER_NUMBER, 
     OH.CREATED_TS, 
     STAT.STATE, 
     STAT.TIMESTAMP 
FROM  IMPL_OH_ORDER_HEADER OH, 
     SNCR_ORDER_DISPOSITION STAT, 
     SNCR_ORDER_DISP_HEAD STATHEAD, 
     IMPL_CUST_ACCOUNT CUST 
WHERE STAT.DISP_TRANSACTION_ID = STATHEAD.DISP_TRANSACTION_ID 
AND  STATHEAD.TRANSACTION_ID = OH.TRANSACTION_ID 
AND  OH.ACCOUNT_ID = CUST.ACCOUNT_ID 
AND  STAT.CATEGORY = 100 
AND  OH.USER_ID = 'A' 
AND  CUST.ACCOUNT_NUM = '123' 
GROUP BY OH.ORDER_NUMBER, 
     OH.CREATED_TS, 
     STAT.STATE, 
     STAT.TIMESTAMP 
ORDER BY STAT.TRX_SEQ DESC;