Ir para conteúdo

Arquivado

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

Rodrigo MF

[Resolvido] Query

Recommended Posts

bom dia senhores, estou com uam pequena duvida sobre uma query.

é o seguinte, tenho uma query q me volta o numero de carros utilizados e outra q me volta o numero de carros disponiveis, e eu gostaria de dividir o n° de utilizados/disponiveis.

utilizei o UNION para juntar as querys, mas gostaria de saber como faço pra dividir um pelo outro.

segue a query:

 

SELECT COUNT(DISTINCT FR.FRO_ID)   QTD_USO

 FROM LIQUIDACAO LQ
     ,FROTA      FR
WHERE --> FROTA X LIQUIDACAO
      LQ.LIQU_FRO_EMP_ID          = FR.FRO_EMP_ID
  AND LQ.LIQU_FRO_ID              = FR.FRO_ID

      --> FILTROS
  AND LQ.LIQU_EMP_ID              IN (12)
  AND LQ.LIQU_DTA_EMIS            >= TO_DATE('01/05/2011','DD/MM/RRRR')
  AND LQ.LIQU_DTA_EMIS            <= TO_DATE('31/05/2011','DD/MM/RRRR')

UNION 

select COUNT(t.FRO_ID) QTD_DISPON
from 
frota t
where
   t.fro_gen_tgen_id=9004
and t.fro_gen_emp_id=0
and t.fro_gen_id=1
and t.fro_emp_id=12

 

 

Agredeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT (CASE WHEN DISPONIVEIS > 0 THEN (USADOS/DISPONIVEIS)
            ELSE NULL END) RELACAO
FROM
(
SELECT COUNT(DISTINCT FR.FRO_ID) QTD_USO

FROM LIQUIDACAO LQ
,FROTA FR
WHERE --> FROTA X LIQUIDACAO
LQ.LIQU_FRO_EMP_ID = FR.FRO_EMP_ID
AND LQ.LIQU_FRO_ID = FR.FRO_ID

--> FILTROS
AND LQ.LIQU_EMP_ID IN (12)
AND LQ.LIQU_DTA_EMIS >= TO_DATE('01/05/2011','DD/MM/RRRR')
AND LQ.LIQU_DTA_EMIS <= TO_DATE('31/05/2011','DD/MM/RRRR')
) USADOS,
(
select COUNT(t.FRO_ID) QTD_DISPON
from
frota t
where
t.fro_gen_tgen_id=9004
and t.fro_gen_emp_id=0
and t.fro_gen_id=1
and t.fro_emp_id=12
) DISPONIVEIS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Motta, consegui desse jeito tbm:

 

SELECT 
ROUND(((SELECT COUNT(DISTINCT FR.FRO_ID)   QTD_USO

 FROM LIQUIDACAO LQ
     ,FROTA      FR
WHERE --> FROTA X LIQUIDACAO
      LQ.LIQU_FRO_EMP_ID          = FR.FRO_EMP_ID
  AND LQ.LIQU_FRO_ID              = FR.FRO_ID

      --> FILTROS
  AND LQ.LIQU_EMP_ID              IN (12)
  AND LQ.LIQU_DTA_EMIS            >= TO_DATE('01/05/2011','DD/MM/RRRR')
  AND LQ.LIQU_DTA_EMIS            <= TO_DATE('31/05/2011','DD/MM/RRRR')
  --AND FR.fro_gen_id_tp_propr_de      IN (1,2) 
) /
(select COUNT(t.FRO_ID) QTD_DISPON
from 
frota t
where
   t.fro_gen_tgen_id=9004
and t.fro_gen_emp_id=0
and t.fro_gen_id=1
and t.fro_emp_id=12)),2)*100 AS MEDIA 
FROM dual

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas tenha cuidado com uma divisão por zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

..... e se esse resultado realmente der uma divisão por 0. (porque pode acontecer). Como resolver?

 

 

Tenho um caso parecido, onde preciso dividir o total de monitoria pela soma das notas. Para isso criei 2 tabelas virtuais. Uma p/ obter a quantidade total de monitoria que cada monitor de qualidade fez e outra p/ obter a soma das notas daquele monitor. Depois busco campos dessas duas tabelas.

 

Mas ai preciso dividir um pelo outro. E o que fiz, foi algo muito parecido com o do post acima:

Case When T2.Nota > 0 Then (T2.Nota / Total_Monitoria) Else Null End NOTA_SUPERVISOR ,

 

O problema é que tanto a soma das notas pode dar 0 quanto a quantidade de Monitorias tbm pode dar 0.

 

Como poderia resolver isso????

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é só o dividor, o dividendo pode ser zero.

 

 

(Case when b <> 0 then a/b else null end) colunax ...

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.