usar parametros no and if da clausula where

FireDAC

04/02/2019

como posso usar mais um campo junto com data de conclusao e data de emisao na clausula abaixo

WHERE (ms.ID_CLIENTE LIKE :pFiltro OR cli.FOR_NOME LIKE :pFiltro OR cli.FOR_DOCUMENTO LIKE :pFiltro OR ms.ID_VENDA_MS LIKE :pFiltro OR v.VENDEDOR_NOME LIKE :pFiltro)
AND IF(:cData = ''venda_data_emissao'', ms.VENDA_DATA_EMISSAO, ms.VENDA_DATA_CONCLUSAO) >= :pDataI
AND IF(:cData = ''venda_data_emissao'', ms.VENDA_DATA_EMISSAO, ms.VENDA_DATA_CONCLUSAO) <= :pDataF



ou seja, queria que ficasse assim colocando data de fechamento do pedido...


WHERE (ms.ID_CLIENTE LIKE :pFiltro OR cli.FOR_NOME LIKE :pFiltro OR cli.FOR_DOCUMENTO LIKE :pFiltro OR ms.ID_VENDA_MS LIKE :pFiltro OR v.VENDEDOR_NOME LIKE :pFiltro)
AND IF(:cData = ''venda_data_emissao'', ms.VENDA_DATA_EMISSAO, ms.VENDA_DATA_CONCLUSAO, ms.data_fechamento) >= :pDataI
AND IF(:cData = ''venda_data_emissao'', ms.VENDA_DATA_EMISSAO, ms.VENDA_DATA_CONCLUSAO, ms.data_fechamento) <= :pDataF
Paulo Castro

Paulo Castro

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

04/02/2019

Olá Paulo, tudo bem?

o if é para condição binária, verifique se teu banco suporta o case:

WHERE 
(ms.ID_CLIENTE LIKE :pFiltro OR cli.FOR_NOME LIKE :pFiltro OR cli.FOR_DOCUMENTO LIKE :pFiltro OR ms.ID_VENDA_MS LIKE :pFiltro OR v.VENDEDOR_NOME LIKE :pFiltro) 
AND 
(
CASE
    WHEN :cData = ''venda_data_emissao''    THEN  ms.VENDA_DATA_EMISSAO
    WHEN :cData = ''venda_data_conclusao'' THEN ms.VENDA_DATA_CONCLUSAO
    ELSE  ms.data_fechamento
) >= :pDataI 
AND 
CASE
    WHEN :cData = ''venda_data_emissao''    THEN  ms.VENDA_DATA_EMISSAO
    WHEN :cData = ''venda_data_conclusao'' THEN ms.VENDA_DATA_CONCLUSAO
    ELSE  ms.data_fechamento
)  <= :pDataF


espero ter ajudado, um forte abraço e fique com Deus.
GOSTEI 3

Mais Respostas

Paulo Castro

Paulo Castro

04/02/2019

helio , obrigado,
deu certo,
pelo manual mysql, precisava apenas colocar o end no final
rodou certinho, segue como ficou,,

SELECT
ms.*,
cli.FOR_NOME,
cli.FOR_DOCUMENTO,
cli.FOR_TELEFONE,
cli.ID_MUNICIPIO,
v.VENDEDOR_NOME,
municipios.MUNICIPIO_DESCRICAO,
estados.ESTADO_SIGLA,
suporte.SUPORTE_NOME,
vendas_dt.ID_VENDA_MS
FROM vendas_ms ms
LEFT OUTER JOIN empresas
ON ms.ID_EMPRESA = empresas.EMPRESA_CODIGO
LEFT OUTER JOIN fornecedores cli
ON ms.ID_CLIENTE = cli.ID_FOR
LEFT OUTER JOIN vendedores v
ON ms.ID_VENDEDOR = v.VENDEDOR_CODIGO AND empresas.EMPRESA_MVTO = v.ID_EMPRESA
LEFT OUTER JOIN municipios
ON cli.ID_MUNICIPIO = municipios.MUNICIPIO_CODIGO
LEFT OUTER JOIN estados
ON municipios.ESTADO_CODIGO = estados.ESTADO_CODIGO
LEFT OUTER JOIN suporte
ON cli.ID_SUPORTE = suporte.ID_SUPORTE
LEFT OUTER JOIN vendas_dt
ON ms.ID_VENDA_MS = vendas_dt.ID_VENDA_DT
LEFT OUTER JOIN itens
ON vendas_dt.ID_ITEM = itens.ID_ITEM
WHERE
(ms.ID_CLIENTE LIKE :pFiltro OR cli.FOR_NOME LIKE :pFiltro OR cli.FOR_DOCUMENTO LIKE :pFiltro OR ms.ID_VENDA_MS LIKE :pFiltro OR v.VENDEDOR_NOME LIKE :pFiltro)
AND
(
CASE
WHEN :cData = 'venda_data_emissao' THEN ms.VENDA_DATA_EMISSAO
WHEN :cData = 'venda_data_conclusao' THEN ms.VENDA_DATA_CONCLUSAO
ELSE ms.data_fechamento
end
) >= :pDataI
AND
(
CASE
WHEN :cData = 'venda_data_emissao' THEN ms.VENDA_DATA_EMISSAO
WHEN :cData = 'venda_data_conclusao' THEN ms.VENDA_DATA_CONCLUSAO
ELSE ms.data_fechamento
end
) <= :pDataF
AND ms.ID_OPERACAO >= :pOperacao AND ms.ID_OPERACAO <= :pAmostra AND (ms.VENDA_SITUACAO LIKE :pSit1 OR ms.VENDA_SITUACAO LIKE :pSit2) AND ms.VENDA_SITUACAO LIKE :pSit3 AND ms.VENDA_SITUACAO <> :pSit4 AND ms.VENDA_SITUACAO <> :pSit5 AND ms.VENDA_SITUACAO <> :pSit6
AND ms.VENDA_SITUACAO <> 18 and ESTADOS.estado_sigla like :PCIDADE
ORDER BY ms.id_venda_ms desc

GOSTEI 1
POSTAR