none
consulta s RRS feed

  • Pregunta

  • Buentas tengo la siguiente consulta:

    select

    p.desc_ubicacion as Ciudad, COUNT(desc_ubicacion) As NumeroCasosRecibidos

    ,

     

    sum(case when p.hdpr_estado = 'Cerrado' then 1 else 0 end) as CasosCumplidos,
     

     

    sum(case when p.hdpr_estado <> 'Cerrado' then 1 else 0 end) as CasosAbiertos,
     

    p

    .id_ciudad as CodCiudad

    from

    diasPais p

    where

     

    convert(smalldatetime,p.hdpr_fechaini,104) >='2011-01-01'

     

    and convert(smalldatetime,p.hdpr_fechaini,104) <='2011-08-29'

    Group

    by p.desc_ubicacion,p.id_ciudad

    order

    by p.desc_ubicacion asc

    y quisiera saber como puedo dividir CasosCumplidos con CasosAbiertos.

    Gracias por su ayuda

    martes, 30 de agosto de 2011 13:52

Respuestas

  • Eso es porque los tipos de datos son enteros. Si quieres decimales tendrás que forzar a que, al menos uno de los dos operandos, sea decimal (ya que este tipo de datos prevalece sobre el entero). Es decir, algo como

    SELECT p.desc_ubicacion AS Ciudad, COUNT(desc_ubicacion) AS NumeroCasosRecibidos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END) AS CasosCumplidos
    , SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS CasosAbiertos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END)
    	/
     SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1. ELSE 0. END) AS division	
    ,p.id_ciudad AS CodCiudad
    
    FROM diasPais p
    
    WHERE 
    	CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) >='2011-01-01'
    	AND CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) <='2011-08-29'
    
    GROUP BY p.desc_ubicacion,p.id_ciudad
    
    ORDER BY p.desc_ubicacion ASC
    


    • Marcado como respuesta Albert8601 miércoles, 31 de agosto de 2011 13:51
    miércoles, 31 de agosto de 2011 7:08

Todas las respuestas

  • No entiendo la pregunta. Si es sólo dividir, ¿por qué no aplicas el operador correspondiente a esos campos? Algo como

     

    SELECT p.desc_ubicacion AS Ciudad, COUNT(desc_ubicacion) AS NumeroCasosRecibidos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END) AS CasosCumplidos
    , SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS CasosAbiertos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END)
    	/
     SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS division	
    ,p.id_ciudad AS CodCiudad
    
    FROM diasPais p
    
    WHERE 
    	CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) >='2011-01-01'
    	AND CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) <='2011-08-29'
    
    GROUP BY p.desc_ubicacion,p.id_ciudad
    
    ORDER BY p.desc_ubicacion ASC
    

     

    Por cierto, si el campo hdpr_fechaini es fecha, no hagas esa conversión. Si has tenido problemas con el formato de la fecha, úsala como YYYYMMDD. Es decir, que la parte del WHERE sea

     

    ...
    WHERE 
    	p.hdpr_fechaini >='29082011'
    	AND p.hdpr_fechaini <='29082011'
    ...
    


     


    • Marcado como respuesta Albert8601 martes, 30 de agosto de 2011 18:53
    • Desmarcado como respuesta Albert8601 martes, 30 de agosto de 2011 19:10
    martes, 30 de agosto de 2011 13:59
  • No entiendo la pregunta. Si es sólo dividir, ¿por qué no aplicas el operador correspondiente a esos campos? Algo como

     

    SELECT p.desc_ubicacion AS Ciudad, COUNT(desc_ubicacion) AS NumeroCasosRecibidos
    
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END) AS CasosCumplidos
    
    , SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS CasosAbiertos
    
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END)
    
    	/
    
     SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS division	
    
    ,p.id_ciudad AS CodCiudad
    
    
    
    FROM diasPais p
    
    
    
    WHERE 
    
    	CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) >='2011-01-01'
    
    	AND CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) <='2011-08-29'
    
    
    
    GROUP BY p.desc_ubicacion,p.id_ciudad
    
    
    
    ORDER BY p.desc_ubicacion ASC
    
    

     

    Por cierto, si el campo hdpr_fechaini es fecha, no hagas esa conversión. Si has tenido problemas con el formato de la fecha, úsala como YYYYMMDD. Es decir, que la parte del WHERE sea

     

    ...
    
    WHERE 
    
    	p.hdpr_fechaini >='29082011'
    
    	AND p.hdpr_fechaini <='29082011'
    
    ...
    
    


     



    si realiza la operación, pero solo esta mostrando la parte entera del resultado; es decir, si la division da 1,3, muestra 1, si da 0,9 muestra 0.  Siempre la parte entera, no ahy algún modo de que muestre todo el resultado, es decir, el 1,3  y el 0,9.

     

    Gracias por su ayuda.

    martes, 30 de agosto de 2011 19:11
  • Eso es porque los tipos de datos son enteros. Si quieres decimales tendrás que forzar a que, al menos uno de los dos operandos, sea decimal (ya que este tipo de datos prevalece sobre el entero). Es decir, algo como

    SELECT p.desc_ubicacion AS Ciudad, COUNT(desc_ubicacion) AS NumeroCasosRecibidos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END) AS CasosCumplidos
    , SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1 ELSE 0 END) AS CasosAbiertos
    , SUM(CASE WHEN p.hdpr_estado = 'Cerrado' THEN 1 ELSE 0 END)
    	/
     SUM(CASE WHEN p.hdpr_estado <> 'Cerrado' THEN 1. ELSE 0. END) AS division	
    ,p.id_ciudad AS CodCiudad
    
    FROM diasPais p
    
    WHERE 
    	CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) >='2011-01-01'
    	AND CONVERT(SMALLDATETIME,p.hdpr_fechaini,104) <='2011-08-29'
    
    GROUP BY p.desc_ubicacion,p.id_ciudad
    
    ORDER BY p.desc_ubicacion ASC
    


    • Marcado como respuesta Albert8601 miércoles, 31 de agosto de 2011 13:51
    miércoles, 31 de agosto de 2011 7:08