Ir para conteúdo

Arquivado

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

Adriano..sousa

Calcular percentual de horas

Recommended Posts

BOM PESSOAL,
SEGUE O MEU PROBLEMA
ESTOU TENTANDO CALCULAR UMA JORNADA DE TRABALHO NO SQL SERVER 2005
DAI PARA ISSO ESTOU CONVERTENDO PRA MINUTOS AS HORAS E DAI CALCULANDO
O PERCENTUAL, MAS QUANDO A JORNADA DE TRABALHO FICA ABAIXO DE 1%
ELE ME RETORNA ZERADO .
DAI VENHO SOLICITAR AJUDAR DE VCS PARA PODER CALCULAR ESSE PERCENTUAL

SEGUE MINHA CONSULTA:

 

 

 

 

SELECT MATRICULA, FUNCIONARIO, CENTRO_DE_CUSTO, TH, (PERCENTUAL/60) AS PERCENTUAL, Cast((convert(money,(SOMA*(PERCENTUAL/60 )))/100)as Numeric(10,2)) AS CALCULO, GRUPO, TIPO
FROM( SELECT I.MATRICULA, I.FUNCIONARIO, AP.CENTRO_DE_CUSTO,
convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) / 60 ) + ':' +
REPLICATE('0', 2 - datalength( ltrim(rtrim( convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) % 60 ) ))) ) +
convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) % 60 ) + ':00' as TH,
(CONVERT(VARCHAR,((((SUM(SUBSTRING(TH,1,2) * 60 + SUBSTRING(TH, 4,2))))*100)/13200))) AS PERCENTUAL,
SUM(I.VALOR_EVENTO) AS SOMA, I.GRUPO,
CASE
WHEN AP.CENTRO_DE_CUSTO = MAT.CCPADRAO THEN 'CREDITO'
WHEN AP.CENTRO_DE_CUSTO <> MAT.CCPADRAO THEN 'DEBITO'
END AS TIPO
FROM APROPRIACAO AS AP INNER JOIN MATRICULA AS MAT ON (AP.ID=MAT.ID)
INNER JOIN IMPORTACAO I ON (AP.ID=I.MATRICULA)
WHERE MAT.CCPADRAO IS NOT NULL AND AP.CENTRO_DE_CUSTO <> CCPADRAO AND MONTH(DATA) = '04' AND YEAR(DATA) = '2013' AND AP.ID='001137'
GROUP BY I.MATRICULA, I.FUNCIONARIO, AP.CENTRO_DE_CUSTO, I.GRUPO, MAT.CCPADRAO
)X
GROUP BY MATRICULA, FUNCIONARIO, CENTRO_DE_CUSTO, TH, (PERCENTUAL/60), GRUPO, TIPO,
Cast((convert(money,(SOMA*(PERCENTUAL/60 )))/100)as Numeric(10,2))

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para calculos de percentuais, pq não utiliza decimal com casas decimais <> de 0?

Eu vi que você converte para varchar depois um SUM e neste meio pode estar perdendo formatação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabei resolvendo de um modo simples de divisão...

 

declare @PERCENTUAL int set @PERCENTUAL = 40 select (@PERCENTUAL / 60) as [Divisão inteira], (@PERCENTUAL / 60.) as[Divisão real]

 

dai minha consulta ficou assim !!!

 

 


CREATE VIEW VW_RM_DEBITO
AS
with
CTE_IMP as
(
SELECT MATRICULA, GRUPO, SUM(VALOR_EVENTO) AS SOMA, CENTROCUSTO, CMPT FROM IMPORTACAO
GROUP BY MATRICULA, GRUPO, CENTROCUSTO, CMPT
),
CTE_AP as
(
SELECT ID, CENTRO_DE_CUSTO, DATA , TH, PERCENTUAL, TIPO
FROM (
SELECT AP.ID, AP.CENTRO_DE_CUSTO,DATA,
convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) / 60 ) + ':' +
REPLICATE('0', 2 - datalength( ltrim(rtrim( convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) % 60 ) ))) ) +
convert(varchar,( sum(datepart(hh,convert(varchar,th,108))) * 60 + sum(datepart(mi,convert(varchar,th,108))) ) % 60 ) + ':00' as TH,
'DEBITO' AS TIPO,
CONVERT(DECIMAL(10,2),SUM(SUBSTRING(TH,1,2) * 60 + SUBSTRING(TH, 4,2))*100/13200. ) AS PERCENTUAL
FROM APROPRIACAO AS AP INNER JOIN MATRICULA AS MAT ON (AP.ID=MAT.ID)
WHERE MAT.CCPADRAO IS NOT NULL AND AP.CENTRO_DE_CUSTO <> CCPADRAO
GROUP BY AP.ID,AP.CENTRO_DE_CUSTO, MAT.CCPADRAO, DATA
)X
GROUP BY ID, CENTRO_DE_CUSTO, DATA , TH, PERCENTUAL, TIPO
)
SELECT CAP.ID, MAT.NOME, CAP.CENTRO_DE_CUSTO, SUM(CAP.PERCENTUAL)AS PERCENTUAL , SUM(CIMP.SOMA) AS SOMA , CIMP.GRUPO,
Cast((convert(money,(CIMP.SOMA*(CAP.PERCENTUAL )))/100)as Numeric(10,2)) AS CALCULO,
CAP.TIPO, CIMP.CMPT, CAP.DATA
FROM CTE_AP AS CAP INNER JOIN CTE_IMP AS CIMP ON (CAP.ID=CIMP.MATRICULA)
INNER JOIN MATRICULA AS MAT ON (CAP.ID=MAT.ID)
WHERE CAP.CENTRO_DE_CUSTO IS NOT NULL AND GRUPO IS NOT NULL
GROUP BY CAP.ID, MAT.NOME, CAP.CENTRO_DE_CUSTO, CIMP.GRUPO,SOMA,
CAP.TIPO, CIMP.CMPT, CAP.DATA, CAP.PERCENTUAL

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.