今天在工作中碰到一个问题,用group by 语句进行分组时出现ORA-00979错误。
代码如下:
select R.ORDER_NO, R.PRODUCT_CODE, R.REGION_NO, R.ORGAN_NEW_NO, R.ORGAN_NAME, R.ERROR_TYPE, R.SALE_DISCOUNT, R.SALE_NUM, R.REMARK, DECODE(R.ERROR_TYPE, '1', '数量异常', '2', '折扣异常', '3', '提前销售') ERROR_TYPE_DES, A.REGION_NAME REGION_NAME, P.PUTONSALE_DATE PUTONSALE_DATE, P.REMARK PRODUCT_LEVEL, P.SALE_DATE SALE_DATE from U_MD_WX2.ITSC_MSG_ABNORMAL_RECORD R, U_MD_WX2.ITSC_PUTONSALE_INFO P, U_MD_WX2.ITSC_AREA_CONFIG A WHERE R.REGION_NO = A.REGION_NO and R.PRODUCT_CODE = P.PRODUCT_CODE group by R.ORDER_NO, R.PRODUCT_CODE, R.REGION_NO, R.ORGAN_NEW_NO, R.ORGAN_NAME, R.ERROR_TYPE, R.SALE_DISCOUNT, R.SALE_NUM, DECODE(R.ERROR_TYPE, '1', '数量异常', '2', '折扣异常', '3', '提前销售'), A.REGION_NAME, P.PUTONSALE_DATE, SALE_DATE
运行时出现以下错误:
经自己排查后,发现是group by后面缺少字段。
本以为,查询所有字段,然后按照其中几个字段进行分组。。。
仔细想想后,我太傻了,查询所有字段怎么可用只用部分字段进行分组,又没有使用聚合函数。
正确的方式应该是查询多少字段,group by 后面就要加上多少字段。
正确的代码如下:
select R.ORDER_NO, R.PRODUCT_CODE, R.REGION_NO, R.ORGAN_NEW_NO, R.ORGAN_NAME, R.ERROR_TYPE, R.SALE_DISCOUNT, R.SALE_NUM, R.REMARK, DECODE(R.ERROR_TYPE, '1', '数量异常', '2', '折扣异常', '3', '提前销售') ERROR_TYPE_DES, A.REGION_NAME REGION_NAME, P.PUTONSALE_DATE PUTONSALE_DATE, P.REMARK PRODUCT_LEVEL, P.SALE_DATE SALE_DATE from U_MD_WX2.ITSC_MSG_ABNORMAL_RECORD R, U_MD_WX2.ITSC_PUTONSALE_INFO P, U_MD_WX2.ITSC_AREA_CONFIG A WHERE R.REGION_NO = A.REGION_NO and R.PRODUCT_CODE = P.PRODUCT_CODE group by R.ORDER_NO, R.PRODUCT_CODE, R.REGION_NO, R.ORGAN_NEW_NO, R.ORGAN_NAME, R.ERROR_TYPE, R.SALE_DISCOUNT, R.SALE_NUM, R.REMARK, DECODE(R.ERROR_TYPE, '1', '数量异常', '2', '折扣异常', '3', '提前销售'), A.REGION_NAME, P.PUTONSALE_DATE, P.REMARK, SALE_DATE
Oracle基础还要补啊。