none
Case em Clausula WERE Sql Server RRS feed

  • Pergunta

  • estou fazendo o Select que eu precisaria verificar o campo 'INTERNACIONAL' para poder compor a clausula where, se o registro 'INTERNACIONAL' for 'TRUE' eu quero que a condição 'I.QTDE_PEDIDA > I.QTDE_TRANSFERIDA' seja usada na clausula 'WHERE' se for 'FALSE' usaria a condição 'I.QTDE_PEDIDA > I.QTDE_EMBARCADA' fiz desta forma e não deu certo

    SELECT
    CASE WHEN ISNULL(C.INTERNACIONAL,0) = 1 THEN I.QTDE_PEDIDA - I.QTDE_TRANSFERIDA ELSE I.QTDE_PEDIDA - I.QTDE_EMBARCADA END  QTDE_PENDENTE,
       C.INTERNACIONAL INTERNACIONAL,
       C.STATUS STATUS,
       TUS.NOME USUARIO_STATUS,
       TUS.NOME_PGOOGLE USUARIO_STATUS_PGOOGLE,
       I.QTDE_TRANSFERIDA QTDE_TRANSFERIDA,
       I.QTDE_EMBARCADA QTDE_EMBARCADA,
       I.QTDE_PEDIDA QTDE_PEDIDA,
       I.PRODUTO PRODUTO
    FROM
       TB_COMPRA C 
       LEFT JOIN DBO.TB_USUARIO TUS With(READUNCOMMITTED) ON TUS.USUARIO_ID = C.USER_ID AND TUS.STATUS <> 0
       INNER JOIN DBO.TB_COMPRAITEM I  ON C.COMPRA_ID = I.COMPRA_ID  AND I.STATUS <> 0
    
    WHERE
      CASE WHEN ISNULL(C.INTERNACIONAL,0) = 1 THEN I.QTDE_PEDIDA > I.QTDE_TRANSFERIDA ELSE I.QTDE_PEDIDA > I.QTDE_EMBARCADA END    AND ISNULL(C.CP_VALIDAREMBARQUE,0) = 0 AND ISNULL(C.ARQUIVADO,0) = 0 
    Alguém sabe me informar onde estou errando ?

    sexta-feira, 2 de setembro de 2022 19:39

Respostas

  • Boa tarde,

    Segue uma sugestão para testes mantendo o Case:

    WHERE
      I.QTDE_PEDIDA > 
          CASE WHEN ISNULL(C.INTERNACIONAL,0) = 1 
              THEN I.QTDE_TRANSFERIDA 
              ELSE I.QTDE_EMBARCADA 
          END AND 
      ISNULL(C.CP_VALIDAREMBARQUE,0) = 0 AND 
      ISNULL(C.ARQUIVADO,0) = 0 
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta WICTOR MENKALHA sexta-feira, 2 de setembro de 2022 23:28
    sexta-feira, 2 de setembro de 2022 20:21