eu tenho uma query que tem muitos relacionamentos where, porem tem um dado que preciso buscar que só virá usando uma left join, porem não sou familiarizado com essa função left join preciso de uma ajudinha.
Bom dia, pessoal.
Sou nova aqui no fórum e estou necessitando de uma grande ajuda.
Tenho uma sentença SQL (banco Oracle) que calcula o saldo de horas extras de cada funcionário. Nela mostra se o funcionário está com horas positivas ou negativas. A questão é que agora pediram para fazer esse cálculo por setor e não por funcionário. Ou seja, preciso somar todos os funcionários do setor e fazer um totalzão das horas positivas e outro das horas negativas do setor.
Busquei aqui no fórum e o mais próximo que achei foi esse tópico fechado aqui:
https://forum.imasters.com.br/topic/496657-calculando-positivos-e-negativos-da-soma-total/
Nesse tópico sugeria criar a linha abaixo usando a query como uma tabela virtual:
SELECT (CASE WHEN total < 0 THEN valor ELSE 0 END) negativo,
(CASE WHEN total >= 0 THEN valor ELSE 0 END) positivo
FROM
No entanto, quando fui tentar adaptar para a minha sentença SQL, não funcionou.
Não sou especialista em SQL e não sei se fiz algo de errado ou se o caso desse tópico em questão não seria a solução para o meu caso.
A minha sentença atual é essa abaixo (não fui eu quem fez). Agradeço qualquer ajuda para essa pessoa leiga em SQL.
SELECT DISTINCT
Y.* ,
TRUNC((trunc(VALOR_HORA * 1.5,2)) *(TO_NUMBER(SUBSTR(HORAS, 0, INSTR(HORAS,
':')-1)) + TRUNC(TO_NUMBER(SUBSTR(HORAS, INSTR(HORAS, ':')+1, 99)) /60,2)),2)
AS SOMA_MAIS_50PORCENTO
FROM
(
SELECT
X.CODCOLIGADA,
X.CHAPA,
X.NOME,
X.NOMEFANTASIA,
X.CODSECAO,
X.DESCRICAO,
X.FUNCAO,
ROUND(SALARIO, 2) AS VALOR_HORA,
TO_CHAR(TRUNC((HORAS * 60) / 3600), 'FM9900') || ':' || TO_CHAR(TRUNC
(MOD((MINUTOS * 60), 3600) / 60), 'FM00') AS HORAS
FROM (
SELECT
A.CODCOLIGADA,
A.CHAPA,
B.NOME,
C.NOMEFANTASIA,
B.CODSECAO,
D.DESCRICAO,
E.NOME AS FUNCAO,
B.SALARIO / B.JORNADAMENSAL * 60 AS SALARIO,
B.SALARIO SALARIO_ORIGINAL,
B.JORNADAMENSAL,
CASE WHEN
CAST(((SUM
(((EXTRAFAIXA1+EXTRAFAIXA2+EXTRAFAIXA3+EXTRAFAIXA4+EXTRAFAIXA5)+(EXTRADESC1+EX
TRADESC2)+(EXTRAFER1+EXTRAFER2)+(EXTRACOMP1+EXTRACOMP2)))-
SUM(FALTA+ATRASO))) AS DECIMAL(18,2)) >=0 THEN
CAST(((SUM
(((EXTRAFAIXA1+EXTRAFAIXA2+EXTRAFAIXA3+EXTRAFAIXA4+EXTRAFAIXA5)+(EXTRADESC1+EX
TRADESC2)+(EXTRAFER1+EXTRAFER2)+(EXTRACOMP1+EXTRACOMP2)))-
SUM(FALTA+ATRASO))) AS DECIMAL(18,2)) ELSE
-CAST(((SUM
(((EXTRAFAIXA1+EXTRAFAIXA2+EXTRAFAIXA3+EXTRAFAIXA4+EXTRAFAIXA5)+(EXTRADESC1+EX
TRADESC2)+(EXTRAFER1+EXTRAFER2)+(EXTRACOMP1+EXTRACOMP2)))-
SUM(FALTA+ATRASO))) AS DECIMAL(18,2))
END AS MINUTOS,
CAST(((SUM
(((EXTRAFAIXA1+EXTRAFAIXA2+EXTRAFAIXA3+EXTRAFAIXA4+EXTRAFAIXA5)+(EXTRADESC1+EX
TRADESC2)+(EXTRAFER1+EXTRAFER2)+(EXTRACOMP1+EXTRACOMP2)))-
SUM(FALTA+ATRASO))) AS DECIMAL(18,0)) AS HORAS
FROM ABANCOHORFUN A
LEFT OUTER JOIN PFUNC B ON A.CODCOLIGADA=B.CODCOLIGADA AND
A.CHAPA=B.CHAPA
LEFT OUTER JOIN GFILIAL C ON B.CODCOLIGADA=C.CODCOLIGADA AND
B.CODFILIAL=C.CODFILIAL
LEFT OUTER JOIN PSECAO D ON B.CODCOLIGADA=D.CODCOLIGADA AND
B.CODSECAO=D.CODIGO
LEFT OUTER JOIN PFUNCAO E ON E.CODCOLIGADA = B.CODCOLIGADA AND
E.CODIGO = B.CODFUNCAO
WHERE B.CODSITUACAO<>'D'
AND A.DATA >= :PLN_C3_D
AND A.DATA <= :PLN_C4_D
AND A.CODCOLIGADA = :PLN_C2_N
GROUP BY A.CODCOLIGADA,
A.CHAPA,
B.NOME,
C.NOMEFANTASIA,
B.CODSECAO,
D.DESCRICAO,
E.NOME,
B.SALARIO / B.JORNADAMENSAL,
B.SALARIO,
B.JORNADAMENSAL
) X
) Y
como faço para trazer uma soma dessa linha de comando:
round(vlr.pre_pro_valor * sum(loc.loc_area) over (partition by lnc.id_recur_lanc,loc.loc_area ) / sum(loc.loc_area) over (partition by lnc.id_recur_lanc) * ins.insum_qtde,3) as Gasto_total,
Tenha uma tabela com dados de codigo de produto (number), produto (char) ,data de entrada do ultimo valor do produto formato (date) e valor do produto (number[9,4] e ), como faço para trazer o campo valor do produto referente a ultima data de valor?
eu tenho uma query que tem muitos relacionamentos where, porem tem um dado que preciso buscar que só virá usando uma left join, porem não sou familiarizado com essa função left join preciso de uma ajudinha.
Compartilhar este post
Link para o post
Compartilhar em outros sites