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基礎還要補啊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM