Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luan_alves

Auxilio para melhorar procedure

Recommended Posts

Boa tarde á todos,

 

Gostaria de pedir auxilio de vocês para melhorar uma procedure que tive de alterar as preças.

O que eu quero melhorar é esse if/else , ele apenas verifica se uma das variaveis de entrada esta vazia. Mas esse if/else esta com o bloco inteiro de select, alterando apenas a parte do where "e.identificacao=equipe".

CREATE PROCEDURE `sp_view_jobsequipeperiodo`(IN equipe varchar(255),data_inicial DATE,data_final DATE)
BEGIN
IF(equipe IS NULL) THEN
       SELECT c.titulo AS cliente,jt.titulo AS tipo_job,j.idjobs,j.codigo,j.titulo,j.data_inicio,ji.status,ji.idjob_interacao,SEC_TO_TIME(SUM(TIME_TO_SEC(ji.tempo_corrido))) AS tempo_corrido
	FROM jobs AS j
	INNER JOIN usuarios  AS u ON u.idusuarios = j.responsavel
	INNER JOIN equipes AS e ON u.idequipes = e.idequipes
	INNER JOIN clientes AS c ON j.idclientes = c.idclientes
	INNER JOIN jobs_tipos AS jt ON j.idjobs_tipos = jt.idjobs_tipos
	LEFT JOIN (SELECT * FROM job_interacao ORDER BY data_cadastro DESC) AS ji ON j.idjobs = ji.idjobs
	WHERE j.ativado = 1 AND j.data_inicio BETWEEN  data_inicial AND data_final
	GROUP BY j.idjobs
	ORDER BY data_inicio;
else 
	SELECT c.titulo AS cliente,jt.titulo AS tipo_job,j.idjobs,j.codigo,j.titulo,j.data_inicio,ji.status,ji.idjob_interacao,SEC_TO_TIME(SUM(TIME_TO_SEC(ji.tempo_corrido))) AS tempo_corrido
	FROM jobs AS j
	INNER JOIN usuarios  AS u ON u.idusuarios = j.responsavel
	INNER JOIN equipes AS e ON u.idequipes = e.idequipes
	INNER JOIN clientes AS c ON j.idclientes = c.idclientes
	INNER JOIN jobs_tipos AS jt ON j.idjobs_tipos = jt.idjobs_tipos
	LEFT JOIN (SELECT * FROM job_interacao ORDER BY data_cadastro DESC) AS ji ON j.idjobs = ji.idjobs
	WHERE e.identificacao=equipe AND j.ativado = 1 AND j.data_inicio BETWEEN  data_inicial AND data_final
	GROUP BY j.idjobs
	ORDER BY data_inicio;
end if;
END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente :

CREATE PROCEDURE `sp_view_jobsequipeperiodo`(IN equipe varchar(255),data_inicial DATE,data_final DATE)
begin
   SELECT c.titulo AS cliente,jt.titulo AS tipo_job,j.idjobs,j.codigo,j.titulo,j.data_inicio,ji.status,ji.idjob_interacao,SEC_TO_TIME(SUM(TIME_TO_SEC(ji.tempo_corrido))) AS tempo_corrido
    FROM jobs AS j
    INNER JOIN usuarios AS u ON u.idusuarios = j.responsavel
    INNER JOIN equipes AS e ON u.idequipes = e.idequipes
    INNER JOIN clientes AS c ON j.idclientes = c.idclientes
    INNER JOIN jobs_tipos AS jt ON j.idjobs_tipos = jt.idjobs_tipos
    left join (select * from JOB_INTERACAO order by DATA_CADASTRO desc) as JI on J.IDJOBS = JI.IDJOBS
    WHERE e.identificacao=coalesce(equipe,e.identificacao) AND j.ativado = 1 AND j.data_inicio BETWEEN data_inicial AND data_final
    GROUP BY j.idjobs
    ORDER BY data_inicio;

END

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tente :

CREATE PROCEDURE `sp_view_jobsequipeperiodo`(IN equipe varchar(255),data_inicial DATE,data_final DATE)
begin
   SELECT c.titulo AS cliente,jt.titulo AS tipo_job,j.idjobs,j.codigo,j.titulo,j.data_inicio,ji.status,ji.idjob_interacao,SEC_TO_TIME(SUM(TIME_TO_SEC(ji.tempo_corrido))) AS tempo_corrido
    FROM jobs AS j
    INNER JOIN usuarios AS u ON u.idusuarios = j.responsavel
    INNER JOIN equipes AS e ON u.idequipes = e.idequipes
    INNER JOIN clientes AS c ON j.idclientes = c.idclientes
    INNER JOIN jobs_tipos AS jt ON j.idjobs_tipos = jt.idjobs_tipos
    left join (select * from JOB_INTERACAO order by DATA_CADASTRO desc) as JI on J.IDJOBS = JI.IDJOBS
    WHERE e.identificacao=coalesce(equipe,e.identificacao) AND j.ativado = 1 AND j.data_inicio BETWEEN data_inicial AND data_final
    GROUP BY j.idjobs
    ORDER BY data_inicio;

END

 

 

Resolvido.

 

Não conheço esta função coalesce. Irei estudar sobre.

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.