如何在使用IF语句的过程中向WHERE添加参数?

时间:2019-07-18 14:08:01

标签: mysql

我有以下查询:

CREATE DEFINER=`db`@`%` PROCEDURE `RelatorioComissoesByDate`(
    IN initialPeriod DATETIME,
    IN finalPeriod DATETIME,
    IN FK_Corretora INT,
    IN NomeCliente VARCHAR(256),
    IN Seguradora VARCHAR(256)
)
BEGIN
    IF NomeCliente IS NULL AND Seguradora IS NULL THEN 
        SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p  INNER JOIN clientes c on c.ID = p.FK_Clientes  INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID  INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras  INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias  INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus  INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID 
        WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod;

    ELSEIF NomeCliente IS NOT NULL AND Seguradora IS NOT NULL THEN
        SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p  INNER JOIN clientes c on c.ID = p.FK_Clientes  INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID  INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras  INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias  INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus  INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID 
        WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and c.FullName LIKE CONCAT('%', NomeCliente , '%') and S.Descricao LIKE CONCAT('%', Seguradora , '%');

    ELSEIF NomeCliente IS NOT NULL THEN
        SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p  INNER JOIN clientes c on c.ID = p.FK_Clientes  INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID  INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras  INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias  INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus  INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID 
        WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and c.FullName LIKE CONCAT('%', NomeCliente , '%');

    ELSEIF Seguradora IS NOT NULL THEN 
        SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p  INNER JOIN clientes c on c.ID = p.FK_Clientes  INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID  INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras  INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias  INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus  INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID 
        WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and   S.Descricao LIKE CONCAT('%', Seguradora , '%');

   END IF;

END

大家如何看到SELECT相同,WHERE的变化是什么,因为我需要在NOT NULL参数上添加子句,但我认为我的方法是不正确,并且如果不重复代码,我将无法在Google上找到最佳解决方案。

0 个答案:

没有答案