Jump to content
Fórum Script Brasil
  • 0

CALCULO DE PORCENTAGEM COM DOIS SELECTS E COM CONDIÇÕES


Leonardo JSantos
 Share

Question

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.

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...