具有两个'HAVING'条件的Oracle查询

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

我有一个查询,我想有两个HAVING条件

  • 第一个条件是总和超过6000(我有完成)
  • 第二个条件是COUNT(1)CNT大于1(其中我需要帮助)

    SELECT SYSDATE,
           CUSTOMER.CIF_NO,
           CUSTOMER.LONG_NAME_ENG,
           TRANSTYPE.short_desc_Eng,
           LOCATION.LONG_DESC_ENG ,
           COUNT(1) CNT,
           SUM(TRANS.AMOUNT) SM
      FROM TRANS, CUSTOMER, TRANSTYPE, LOCATION
     WHERE TRANS.TRS_AC_CIF = CUSTOMER.CIF_NO
       AND TRANS.BRANCH_CODE = LOCATION.BRANCH_CODE
       AND TRANS.COMP_CODE = LOCATION.COMP_CODE
       AND TRANSTYPE.COMP_CODE = TRANS.COMP_CODE
       AND TRANSTYPE.TYPE IN ( 'D' ,  'T' )
       AND TRANSTYPE.CODE = TRANS.TRX_TYPE
       AND TRANS.STATUS = 'P'
       AND TRANS.TRS_TYPE = 'R'
       AND TRANS.CB_IND = 'C'
     GROUP BY CUSTOMER.CIF_NO ,CUSTOMER.LONG_NAME_ENG, 
              TRANSTYPE.short_desc_Eng,  LOCATION.LONG_DESC_ENG 
    HAVING SUM(TRANS.AMOUNT) > 6000 
    ---------------------------
    second having here 
    ----------------------------
     ORDER BY CUSTOMER.CIF_NO, CUSTOMER.LONG_NAME_ENG, LOCATION.LONG_DESC_ENG
    
sql oracle having
1个回答
2
投票

不能在SELECT语句中指定多个HAVING子句,例如这是一种侵犯。但是添加您所需的条件,例如

HAVING SUM(TRANS.AMOUNT) > 6000 AND COUNT(1) > 1 

OR

HAVING SUM(TRANS.AMOUNT) > 6000 OR COUNT(1) > 1

只要

  • SQL语句中存在GROUP BY子句
  • 汇总发生在HAVING子句中

P.S。将查询语法转换为在表中使用explicit JOIN子句而不是旧式逗号分隔的JOIN的语法,并使用aliases作为表名

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