Oracle Запрос с двумя условиями 'HAVING' - PullRequest
0 голосов
/ 08 марта 2020

У меня есть запрос, и я хочу иметь два 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
    

1 Ответ

3 голосов
/ 08 марта 2020

Более одного предложения HAVING нельзя указать в инструкции SELECT, например, это нарушение. Но добавьте необходимое условие, например

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

ИЛИ

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

, пока присутствует

  • предложение GROUP BY с помощью оператора SQL
  • агрегации происходят в предложении HAVING

PS Преобразуйте синтаксис вашего запроса в синтаксис с помощью явных выражений JOIN среди таблиц, а не разделенных запятыми соединений JOIN, и используйте псевдонимы для имен таблиц

...