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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar