Devido ao JOIN
método de comunicação (telefone, e-mail, etc.), recebemos muitas duplicatas porque uma empresa pode ter vários métodos de comunicação (CICM.CLIENT_VALUE)
.
Minha pergunta é...
Existe uma maneira de incorporar na instrução select para where if out of the client_Value
field, se o valor = EMAIL & Phone então puxe apenas EMAIL para isso CUSTOMER_ID
, se eles não tiverem e-mail e apenas telefone, puxe telefone
No momento, posso ter CUSTOMER_ID
= 1 e ter 2 registros com os mesmos dados, mas client_value
serão diferentes porque eles têm um e-mail e um telefone, portanto, estou recebendo 2 registros retornados em vez de priorizar 1 sobre o outro.
Aqui está uma imagem para mostrar o que estou fazendo referência... você pode ver que todos os campos apagados têm o mesmo valor em ambos os registros, mas o contact_type e o valor são diferentes. Gostaria de priorizar e escolher TELEFONE em vez de E-MAIL, se disponível, e não obter AMBOS para reduzir a contagem de retorno de registros...
Se isso precisar de esclarecimentos, por favor, avise.
SELECT DISTINCT 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 SALESPROGRESS
, SUM(INV.SALES) AS TOTALSALES
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'
AND INV.STATE = '&State'
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
HAVING SUM(CASE WHEN INV.INVDATE >= TO_DATE('01-Oct-13')
AND INV.INVDATE < TO_DATE('30-Sep-15')
THEN INV.SALES ELSE 0
END) = 0
Se entendi bem sua pergunta, você deve usar a
DECODE
função em sua consulta nas seçõesSELECT
e .GROUP BY
NB: para fins de desempenho, você pode criar um índice usando essa função.