Ir para conteúdo

Arquivado

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

rrrpadilha

Mostrar consulta customizada para usuário.

Recommended Posts

Boa tarde pessoal,

Recebi um chamado interno aqui na empresa onde o usuário gostaria que customiza-se a consulta que ele tem hoje referente a salario de funcionários.

O banco é postgres e estou colocando a imagem da tabela original e da maneira que gostaria que ficasse.

Teria que criar uma tabela temporária? Alguém poderia me dar uma dica...

 

fi5y.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

Vi o exemplo beleza para as imagens que mandei...

E se a consulta for mais complexa... Por exemplo:

 

- Tiver mais de um tipo de evento.

- Opção de colocar filtro de um período maior de 12 meses "mêsano"

 

Vou mandar a consulta não estou sabendo como aplicar...

 

select
grupo.nome as nomegrupo,
empresa.nome as nomeempresa,
(lpad(rh_calculo.mescompetencia::text,2,'0')||'/'||rh_calculo.anocompetencia)::varchar as mesano,
(rh_calculo.anocompetencia||'/'||lpad(rh_calculo.mescompetencia::text,2,'0'))::varchar as anomes,
filial.apelido as nomefilial,
unidade.descricao as nomeunidade,
centrocusto.descricao as nomecentrocusto,
(rh_calculo_financeiro.evento||' - '||rh_evento.descricao)::varchar as nomeevento,
CASE 'CALCULADO'
WHEN 'CALCULADO' THEN rh_calculo_financeiro.valorcalculado
WHEN 'PARTE PATRONAL' THEN rh_calculo_financeiro.valorpartepatronal
WHEN 'REFERENCIA' THEN
CASE WHEN rh_evento.tiporeferencia = 1 THEN
(TRUNC(rh_calculo_financeiro.valorreferencia,0)
+ ROUND( ( (rh_calculo_financeiro.valorreferencia - TRUNC (rh_calculo_financeiro.valorreferencia) )*100//60),2))
ELSE
rh_calculo_financeiro.valorreferencia
END
ELSE 0
END as valorcalculado,
cadastro.razaosocial
from
rh_calculo_financeiro
join rh_calculo on rh_calculo.grupo = rh_calculo_financeiro.grupo
and rh_calculo.empresa = rh_calculo_financeiro.empresa
and rh_calculo.sequencia = rh_calculo_financeiro.sequencia
join rh_calculo_lotacao on
rh_calculo_lotacao.grupo = rh_calculo_financeiro.grupo
and rh_calculo_lotacao.empresa = rh_calculo_financeiro.empresa
and rh_calculo_lotacao.sequencia = rh_calculo_financeiro.sequencia
and rh_calculo_lotacao.filial = rh_calculo_financeiro.filial
and rh_calculo_lotacao.cnpjcpfcodigo = rh_calculo_financeiro.cnpjcpfcodigo
and rh_calculo_lotacao.numerocontrato = rh_calculo_financeiro.numerocontrato
join rh_evento on rh_evento.grupo = rh_calculo_financeiro.grupo
and rh_evento.codigo = rh_calculo_financeiro.evento
join filial on filial.grupo = rh_calculo_financeiro.grupo
and filial.empresa = rh_calculo_financeiro.empresa
and filial.codigo = rh_calculo_financeiro.filial
join unidade on unidade.grupo = rh_calculo_financeiro.grupo
and unidade.empresa = rh_calculo_financeiro.empresa
and unidade.filial = rh_calculo_financeiro.filial
and unidade.codigo = rh_calculo_lotacao.unidade
join centrocusto on centrocusto.grupo = rh_calculo_lotacao.grupo
and centrocusto.codigo = rh_calculo_lotacao.centrocusto
join grupo on grupo.codigo = rh_calculo_financeiro.grupo
join empresa on empresa.grupo = rh_calculo_financeiro.grupo
and empresa.codigo = rh_calculo_financeiro.empresa
join cadastro on cadastro.codigo = rh_calculo_lotacao.cnpjcpfcodigo
WHERE
(rh_calculo_financeiro.grupo, rh_calculo_financeiro.empresa,rh_calculo_financeiro.filial,rh_calculo_financeiro.cnpjcpfcodigo,rh_calculo_financeiro.numerocontrato) in
(SELECT * FROM fnc_retorna_funcionario_historico(1,1,0,'00200200202',0,'01/01/2013','01/09/2013', CASE WHEN 'Sim'= 'Sim' THEN true ELSE false END)
AS (grupo int4,
empresa int4,
filial int4,
cnpjcpfcodigo varchar,
numerocontrato int4)
)
and CASE WHEN 0 = 0 THEN TRUE ELSE rh_calculo_lotacao.unidade = 0 END
and CASE WHEN 0 = 0 THEN TRUE ELSE rh_calculo_lotacao.centrocusto = 0 END
and rh_calculo.dtfinal BETWEEN '01/01/2013' AND '01/09/2013'
and split_part('SIM,SIM,SIM,SIM,SIM,SIM,SIM,SIM',',',rh_calculo.tipo) = 'SIM'
and rh_calculo.simular = 2
and CASE WHEN '' = '' THEN TRUE ELSE POSITION(LPAD(rh_calculo_financeiro.evento::text,4,'0') IN '' )>0 END
and rh_calculo.dtencerramento is not null
and CASE 'CALCULADO'
WHEN 'CALCULADO' THEN rh_calculo_financeiro.valorcalculado
WHEN 'PARTE PATRONAL' THEN rh_calculo_financeiro.valorpartepatronal
WHEN 'REFERENCIA' THEN rh_calculo_financeiro.valorreferencia
ELSE 0
END > 0
order by nomegrupo,nomeempresa,nomefilial,nomeunidade,nomecentrocusto,rh_calculo.anocompetencia,rh_calculo.mescompetencia,rh_evento.sequenciacalculo;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca trabalhei com PostgreeSql mas creio que sim.

Se a consulta for mais complexa talvez criar uma view para deixá-la mais simples na aparência, teria de avaliar a performance.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca trabalhei com PostgreeSql mas creio que sim. Se a consulta for mais complexa talvez criar uma view para deixá-la mais simples na aparência, teria de avaliar a performance.

 

Resolvi desta forma FUNÇÃO 'MAX':

 

rh_calculo_financeiro.valorcalculado = salario mensal

 

 

SELECT

 

campo1, campo2,

max(CASE WHEN (rh_calculo.mescompetencia = '1')
THEN rh_calculo_financeiro.valorcalculado END) AS Janeiro,
max(CASE WHEN (rh_calculo.mescompetencia = '2')
THEN rh_calculo_financeiro.valorcalculado END) AS Fevereiro,
max(CASE WHEN (rh_calculo.mescompetencia = '3')
THEN rh_calculo_financeiro.valorcalculado END) AS Março,
max(CASE WHEN (rh_calculo.mescompetencia = '4')
THEN rh_calculo_financeiro.valorcalculado END) AS Abril,
max(CASE WHEN (rh_calculo.mescompetencia = '5')
THEN rh_calculo_financeiro.valorcalculado END) AS Maio,
max(CASE WHEN (rh_calculo.mescompetencia = '6')
THEN rh_calculo_financeiro.valorcalculado END) AS Junho,
max(CASE WHEN (rh_calculo.mescompetencia = '7')
THEN rh_calculo_financeiro.valorcalculado END) AS Julho,
max(CASE WHEN (rh_calculo.mescompetencia = '8')
THEN rh_calculo_financeiro.valorcalculado END) AS Agosto,
max(CASE WHEN (rh_calculo.mescompetencia = '9')
THEN rh_calculo_financeiro.valorcalculado END) AS Setembro,
max(CASE WHEN (rh_calculo.mescompetencia = '10')
THEN rh_calculo_financeiro.valorcalculado END) AS Outubro,
max(CASE WHEN (rh_calculo.mescompetencia = '11')
THEN rh_calculo_financeiro.valorcalculado END) AS Novembro,
max(CASE WHEN (rh_calculo.mescompetencia = '12')
THEN rh_calculo_financeiro.valorcalculado END) AS Dezembro
From
TABELAS......
Where
CONDIÇÃO / FILTROS.......

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.