Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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))
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
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.