-
Conteúdo Similar
-
Por cfsardinha
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
ORDER BY 5,10
-
Por marcos antonio duarte
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,
-
Por marcos antonio duarte
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?
cod_produto | produto | data entrada | valor
1 arroz 01/01/2017 | 5,80
1 arroz 03/01/2017 | 6,10
2 feijao 05/02/2017 | 8,00
3 macarrão 01/01/2017 | 2,5
3 macarrão 15/01/2017 | 2,8
-