usar parametros no and if da clausula where
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
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
Curtidas 0
Melhor post
Hélio Devmedia
04/02/2019
Olá Paulo, tudo bem?
o if é para condição binária, verifique se teu banco suporta o case:
espero ter ajudado, um forte abraço e fique com Deus.
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
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
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