Atualizei esta pergunta porque fiz progressos, minha HAVING
declaração ainda não está funcionando corretamente. estou conseguindo ORA-00933: SQL command not properly ended
..
Eu acredito que é minha HAVING
cláusula. Alguma ideia?
RECAPITULAÇÃO :
Estou tentando capturar o progresso dos clientes que não tiveram atividade de compra entre 2013-2015 e rastrear sua atividade de compra de outubro de 2015 em diante para rastrear a atividade do vendedor.
SELECT INV.COMPANY
, INV.CUSTOMER_ID
, INV.ADDRESS_ID
, INV.NAME
, INV.ADDRESS1
, INV.ADDRESS2
, INV.CITY
, INV.STATE
, INV.ZIP_CODE
, INV.COUNTRY
, CICM.CLIENT_VALUE as contact_type
, CICM.VALUE
, CICM.DESCRIPTION
, INV.REGION_CODE
, INV.SITE
, LD.LSTINVDATE
, CASE WHEN TO_DATE(INV.INVDATE) BETWEEN TO_DATE('01-Oct-13') AND TO_DATE('30-Sep-15') THEN SUM(INV.SALES) ELSE 0 END AS TWO_YEARS
, CASE WHEN TO_DATE(INV.INVDATE) BETWEEN TO_DATE('01-Oct-15') AND SYSDATE THEN SUM(INV.SALES) ELSE 0 END AS PROGRESS
, SUM(INV.SALES) AS SLSAMNT
FROM IFSINFO.HB_INVOICING_ALL INV
LEFT JOIN IFSINFO.HB_LAST_INVOICE_DATE LD
ON (INV.COMPANY = LD.COMPANY)
AND (INV.CUSTOMER_ID = LD.IDENTITY)
LEFT JOIN IFSAPP.CUSTOMER_INFO_COMM_METHOD CICM
ON (INV.ADDRESS_ID = CICM.ADDRESS_ID)
AND (INV.CUSTOMER_ID = CICM.CUSTOMER_ID)
WHERE INV.CUST_GRP = '4'
AND INV.COMPANY = '20'
HAVING SUM(INV.INVDATE) BETWEEN TO_DATE('01-Oct-13') AND TO_DATE('30-Sep-15') = 0
--HAVING MAX(LD.LSTINVDATE) < (SYSDATE - INTERVAL '2' YEAR)
GROUP BY INV.COMPANY
, INV.CUSTOMER_ID
, INV.ADDRESS_ID
, INV.NAME
, INV.ADDRESS1
, INV.ADDRESS2
, INV.CITY
, INV.STATE
, INV.ZIP_CODE
, INV.COUNTRY
, CICM.CLIENT_VALUE
, CICM.VALUE
, CICM.DESCRIPTION
, INV.REGION_CODE
, INV.SITE
, LD.LSTINVDATE
, INV.INVDATE
A
HAVING
cláusula é a causa do erro, pois não está sintaticamente correta. Você tem (adicionou parênteses para mostrar como é analisado):e a expressão dentro dos parênteses retorna um resultado booleano.
Além disso, o
SUM(INV.INVDATE)
não faz muito sentido. Que resultado se deve esperar se adicionarmos datas?E como @mustaccio percebeu corretamente, a
HAVING
cláusula vai depoisGROUP BY
de , não antes.Parece que você quer algo assim na
HAVING
cláusula:que eu preferiria reescrever como:
O
INV.INVDATE
também deve ser removido daGROUP BY
cláusula e as expressõesTWO_YEARS
ePROGRESS
também devem ser corrigidas como aSUM(...)
expressão sugeridaSUM(CASE WHEN ... THEN x ELSE y END)
em vez deCASE WHEN ... THEN SUM(x) ELSE y END
.