RESULTADO INVALIDO

06/12/2021

0

No campo AND GELANSAI.CONSOL='T' e AND GELANDEV.CONSOL='T' estão me trazendo valores zerados, mas quando deixo apenas o GELANSAI.CONSOL='T' me traz valores, mas preciso de adicionar o outro campo, alguém me ajuda



SELECT
/*SAIDA*/
GELANSAI.ITEM ITEM_SAIDA,
GECADSAI.DATA DATA_SAIDA,
GELANSAI.QTDE QTDE_SAIDA,
GELANSAI.VLRMED VLRMED_SAIDA,
GECADSAI.CDC CDC_SAIDA,
/*ITENS*/
I.NOME,
I.UNI_CON,
I.CUSTO VLR_UNI,
(SELECT FIRST 1 GEGRUPOS.NOME FROM GEGRUPOS WHERE GEGRUPOS.COD = I.GRU) GRUPO,
(SELECT FIRST 1 NOME FROM TBCENCUS WHERE COD=GECADSAI.CDC) CDC,
/*DEVOLUCAO*/
GELANDEV.ITEM ITEM_DEV,
GECADDEV.DATA DATA_DEV,
GELANDEV.QTDE QTDE_DEV,
GELANDEV.VLRMED VLRMED_DEV,
GECADDEV.CDC CDC_DEV

FROM GECADSAI
LEFT JOIN GELANSAI ON GECADSAI.ANO=GELANSAI.ANO
AND GECADSAI.MES=GELANSAI.MES
AND GECADSAI.DOC=GELANSAI.DOC
LEFT JOIN GEITENS I ON GELANSAI.ITEM=I.COD
LEFT JOIN TBCENCUS T ON T.COD=GECADSAI.CDC
LEFT JOIN GELANDEV ON GELANDEV.id_gelansai=GELANSAI.id_gelansai
LEFT JOIN GECADDEV ON GECADDEV.ID=GELANDEV.ID_GECADDEV
WHERE GECADSAI.ANO=:ANO
AND GECADSAI.MES=:MES
AND GECADSAI.CDC BETWEEN :CDC1 AND :CDC2
AND GELANSAI.CONSOL='T'
AND GECADSAI.CONSOL='T'
AND GECADSAI.DATA BETWEEN :DATA1 AND :DATA2
ORDER BY CDC_SAIDA, NOME
Marcos Batista

Marcos Batista

Responder

Post mais votado

06/12/2021

não deveria ser OR no lugar de AND, além de usar COALESCE(), visto que o relacionamento é com LEFT JOIN ?

WHERE GECADSAI.ANO=:ANO
AND GECADSAI.MES=:MES
AND GECADSAI.CDC BETWEEN :CDC1 AND :CDC2
AND (COALESCE(GELANSAI.CONSOL,'')='T' OR COALESCE(GECADSAI.CONSOL,'')='T')
AND GECADSAI.DATA BETWEEN :DATA1 AND :DATA2
ORDER BY CDC_SAIDA, NOME

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

07/12/2021

Marcos Batista

não deveria ser OR no lugar de AND, além de usar COALESCE(), visto que o relacionamento é com LEFT JOIN ?

WHERE GECADSAI.ANO=:ANO
AND GECADSAI.MES=:MES
AND GECADSAI.CDC BETWEEN :CDC1 AND :CDC2
AND (COALESCE(GELANSAI.CONSOL,'')='T' OR COALESCE(GECADSAI.CONSOL,'')='T')
AND GECADSAI.DATA BETWEEN :DATA1 AND :DATA2
ORDER BY CDC_SAIDA, NOME


SERÁ QUE CONSIGO FAZER ISSO COM O BETWEEN DATA TBM ?

SELECT
/*SAIDA*/
GELANSAI.ITEM ITEM_SAIDA,
GECADSAI.DATA DATA_SAIDA,
GELANSAI.QTDE QTDE_SAIDA,
GELANSAI.VLRMED VLRMED_SAIDA,
GECADSAI.CDC CDC_COD,
/*ITENS*/
I.NOME,
I.UNI_CON,
I.CUSTO VLR_UNI,
(SELECT FIRST 1 GEGRUPOS.NOME FROM GEGRUPOS WHERE GEGRUPOS.COD = I.GRU) GRUPO,
(SELECT FIRST 1 NOME FROM TBCENCUS WHERE COD=GECADSAI.CDC) CDC,
/*DEVOLUCAO*/
GELANDEV.ITEM ITEM_DEV,
GECADDEV.DATA DATA_DEV,
GELANDEV.QTDE QTDE_DEV,
GELANDEV.VLRMED VLRMED_DEV,
GECADDEV.CDC CDC_COD
FROM GECADSAI
LEFT JOIN GELANSAI ON GECADSAI.ANO=GELANSAI.ANO
AND GECADSAI.MES=GELANSAI.MES
AND GECADSAI.DOC=GELANSAI.DOC
LEFT JOIN GEITENS I ON GELANSAI.ITEM=I.COD
LEFT JOIN TBCENCUS T ON T.COD=GECADSAI.CDC
LEFT JOIN GELANDEV ON GELANDEV.id_gelansai=GELANSAI.id_gelansai
LEFT JOIN GECADDEV ON GECADDEV.ID=GELANDEV.ID_GECADDEV
WHERE GECADSAI.ANO=:ANO
AND GECADSAI.MES=:MES
AND GECADSAI.CDC BETWEEN :CDC1 AND :CDC2
AND GECADSAI.DATA BETWEEN :DATA1 AND :DATA2
AND GECADDEV.DATA BETWEEN :DATA1 AND :DATA2
AND (COALESCE(GELANSAI.CONSOL,'')='T' OR COALESCE(GECADSAI.CONSOL,'')='T')
ORDER BY CDC, NOME
Responder

07/12/2021

Emerson Nascimento

claro.
basta seguir a mesma lógica.
Responder

09/12/2021

Marcos Batista

claro.
basta seguir a mesma lógica.


Segui a mesma lógica, mas não me trouxe resultado, poderia me mostra como ficaria por gentileza ...
Responder

09/12/2021

Emerson Nascimento

tente algo assim:
AND (
       (NOT GECADSAI.DATA IS NULL AND GECADSAI.DATA BETWEEN :DATA1 AND :DATA2)
       OR
       (NOT GECADDEV.DATA IS NULL AND GECADDEV.DATA BETWEEN :DATA1 AND :DATA2)
    )


sempre publique o que você já testou, pra evitar de receber uma resposta que você já testou.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar