Oracle“ORA-00979:不是GROUP BY 表达式”解决方式

时间:2019-10-31
本文章向大家介绍Oracle“ORA-00979:不是GROUP BY 表达式”解决方式,主要包括Oracle“ORA-00979:不是GROUP BY 表达式”解决方式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天在工作中碰到一个问题,用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基础还要补啊。

原文地址:https://www.cnblogs.com/MrZhaoyx/p/11772399.html