Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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...
/applications/core/interface/imageproxy/imageproxy.php?img=http://img13.imageshack.us/img13/9114/fi5y.jpg&key=6ae560f13380facd2ed23323de12c35e14b72aa209c32a5e47948499dfcafd6f" alt="fi5y.jpg" />
Bom dia,
Vi o exemplo beleza para as imagens que mandei...
E se a consulta for mais complexa... Por exemplo:
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;
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.
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.......
http://www.postgresql.org/docs/8.4/static/tablefunc.html
http://www.postgresql.org/docs/7.4/static/functions-conditional.html