我有以下查询:
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上找到最佳解决方案。