Calculo de Porcentagem com dois selects e com condições
11/05/2016
0
Boa tarde,
Estou com um código que me traz os valores dos campos da tabela, porem quando eu " *100/ " ele me dá tudo 100% sendo que o valor seria a quantidades de ordserv. geradas / ordserv.fechadas e depois multiplicada por 100 pra dar o percentual. Segue o código abaixo:
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
SUM(CASE WHEN ORDSERV.STATORD='F' THEN 1 ELSE 0 END) 'REALIZADAS'
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD)
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO REALIZADAS
--- ----- ------- ----------
3 2016 mar/16 489
4 2016 abr/16 659
Esse é o resultado que ele me dá em valores, está correto, total de realizadas.
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
COUNT(*) 'GERADAS'
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO GERADAS
--- ----- ------- -------
3 2016 mar/16 514
4 2016 abr/16 707
Esse é o resultado que ele me dá em valores, está correto, total de geradas.
Quando eu peço pra ele me dá em porcentagem ele me trás tudo 100%.
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
SUM(CASE WHEN ORDSERV.STATORD='F' THEN 1 ELSE 0 END)*100/COUNT(*) AS PORCENTAGEM
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD)
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO PORCENTAGEM
--- ----- ------- -----------
3 2016 mar/16 100
4 2016 abr/16 100
Creio que o erro está na condição "AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD) " , mas é com ele que tiro os resultados da tabela REGSERV e trago para a ORDSERV me dando o todas das realizadas.
Peço ajuda de vocês pois já estou uma semana tentando resolver isso e nada. Qualquer ajuda é bem vinda. Desde já agradeço a todos.
Estou com um código que me traz os valores dos campos da tabela, porem quando eu " *100/ " ele me dá tudo 100% sendo que o valor seria a quantidades de ordserv. geradas / ordserv.fechadas e depois multiplicada por 100 pra dar o percentual. Segue o código abaixo:
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
SUM(CASE WHEN ORDSERV.STATORD='F' THEN 1 ELSE 0 END) 'REALIZADAS'
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD)
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO REALIZADAS
--- ----- ------- ----------
3 2016 mar/16 489
4 2016 abr/16 659
Esse é o resultado que ele me dá em valores, está correto, total de realizadas.
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
COUNT(*) 'GERADAS'
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO GERADAS
--- ----- ------- -------
3 2016 mar/16 514
4 2016 abr/16 707
Esse é o resultado que ele me dá em valores, está correto, total de geradas.
Quando eu peço pra ele me dá em porcentagem ele me trás tudo 100%.
SELECT DATEPART(MM, ORDSERV.DATPRO2) MES, DATEPART(YY, ORDSERV.DATPRO2) MES,
ENGEMAN.MESABREV(ORDSERV.DATPRO2)+'/'+SUBSTRING(CAST(DATEPART(YY, ORDSERV.DATPRO2) AS VARCHAR),3,2) MES_ANO,
SUM(CASE WHEN ORDSERV.STATORD='F' THEN 1 ELSE 0 END)*100/COUNT(*) AS PORCENTAGEM
FROM ORDSERV
WHERE ORDSERV.DATPRO2 BETWEEN '01/03/2016' AND '30/04/2016'
AND ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=76
AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD)
GROUP BY DATEPART(MM, ORDSERV.DATPRO2),ENGEMAN.MESABREV(ORDSERV.DATPRO2), DATEPART(YYYY, ORDSERV.DATPRO2)
ORDER BY 1,2
Resultado:
MES MES_1 MES_ANO PORCENTAGEM
--- ----- ------- -----------
3 2016 mar/16 100
4 2016 abr/16 100
Creio que o erro está na condição "AND 'S' IN (SELECT REGSERV.EXECUTADO FROM REGSERV WHERE REGSERV.CODEMP=ORDSERV.CODEMP AND REGSERV.CODORD=ORDSERV.CODORD) " , mas é com ele que tiro os resultados da tabela REGSERV e trago para a ORDSERV me dando o todas das realizadas.
Peço ajuda de vocês pois já estou uma semana tentando resolver isso e nada. Qualquer ajuda é bem vinda. Desde já agradeço a todos.
Leonardo Santos
Curtir tópico
+ 0
Responder
Posts
11/05/2016
Marcos P
Sempre que incluir código no post, use a tag <Inserir Código> !
Não entendi muito bem seu problema.
Não seria possível você totalizar em variáveis os valores que geram o percentual na query principal ?
Algo tipo :
Não entendi muito bem seu problema.
Não seria possível você totalizar em variáveis os valores que geram o percentual na query principal ?
Algo tipo :
DECLARE @REALIZADAS INT SET @TOTAL = (SELECT COUNT(1) FROM... ) SELECT COUNT(1) AS REALIZADAS, (COUNT(1)/@TOTAL)*100 AS PERCENT FROM... WHERE "REALIZADAS"
Responder
Clique aqui para fazer login e interagir na Comunidade :)