none
CUANTOS PERSONAS PAGARON EN SQL SERVER RRS feed

  • Pregunta

  • Hola gente, buenos días, tardes o noche según sea caso xD.

    Mi consulta es la sgte.  quiero saber cuantas personas pagaron en SQL.

    Por ejemplo:

    I_Anio    |    TOTAL CONTRI

    2017      |     1000

    2018      |     1000

    2019      |      5095

    Hay que tener en cuenta que hay personas que abonaron una parte del total de su deuda (Total - Total_Abonado = Saldo)

    Hice esta consulta que muestra una lista de las personas con su respectivo saldo del año 2015:

    SELECT (I_CodiContri)
    ,( ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)) [SALDO]
    FROM R_CTACORRIENTE
    WHERE I_Anio = 2015
    GROUP BY         (I_CodiContri)

    martes, 30 de abril de 2019 19:35

Respuestas

  • Hola Draig_Alonso:

    Si en tu consulta ya tienes los saldos de las personas para el año 2015, puedes utilizar tu consulta, para realizar un count por año.

    select count(*) as num, i_Anio
    from 
    ( 
    SELECT (I_CodiContri)
    ,( ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)) [SALDO]
    FROM R_CTACORRIENTE
    
    GROUP BY         (I_CodiContri) 
    ) as interior
    where interior.i_anio > 2015
    and interior.SALDO = 0
    group by i_anio

    martes, 30 de abril de 2019 23:23
  • Hola Draig_Alonso:

    SELECT COUNT(*) AS num
    	, i_Anio
    FROM       
    (
        SELECT(I_CodiContri)
    	   , (ROUND((SUM(M_Cargo) - SUM(M_TotalAbono)), 2)) [SALDO]
    	   , i_Anio
        FROM  
    	    R_CTACORRIENTE
        GROUP BY(I_CodiContri)
    		, i_anio
    ) AS interior
    WHERE  interior.i_anio > 2015
    	  AND interior.SALDO = 0
    GROUP BY i_anio;
    Omití la columna en la tabla interior.

    En mi data también tengo Saldo inferior a cero (negativos) ya que pagaron sin embargo pagó de más; al colocar:  

    interior.SALDO <= 0

    ¿me cuenta también los negativos?

    Hice 2 consultas independientes que me muestran los Saldos negativos y los Saldos que son =0, sin embargo en la consulta para que me muestre los negativos y los 0 me muestra algunas 0 y no todos como desearía yo

                                    -- DEUDA =0 --
    SELECT I_CodiContri [Cod. Contribuyente]
    ,SALDO = ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)
    FROM R_CTACORRIENTE
    WHERE (I_Anio= 2015) 
    GROUP BY I_CodiContri
    HAVING (SUM(M_Cargo))<=0

    ---------------------------------------------------------------------------------

                                -- DEUDA = -0 --
    SELECT I_CodiContri [Cod. Contribuyente]
    ,SALDO = ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)
    FROM R_CTACORRIENTE
    WHERE (I_Anio= 2015)
    AND M_Cargo < M_TotalAbono 
    GROUP BY I_CodiContri
    HAVING (SUM(M_Cargo))<=0

    Gracias de antemano. 

    jueves, 2 de mayo de 2019 20:12

Todas las respuestas

  • Hola Draig_Alonso:

    Si en tu consulta ya tienes los saldos de las personas para el año 2015, puedes utilizar tu consulta, para realizar un count por año.

    select count(*) as num, i_Anio
    from 
    ( 
    SELECT (I_CodiContri)
    ,( ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)) [SALDO]
    FROM R_CTACORRIENTE
    
    GROUP BY         (I_CodiContri) 
    ) as interior
    where interior.i_anio > 2015
    and interior.SALDO = 0
    group by i_anio

    martes, 30 de abril de 2019 23:23
  • Hola Draig_Alonso:

    Si en tu consulta ya tienes los saldos de las personas para el año 2015, puedes utilizar tu consulta, para realizar un count por año.

    select count(*) as num, i_Anio
    from 
    ( 
    SELECT (I_CodiContri)
    ,( ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)) [SALDO]
    FROM R_CTACORRIENTE
    
    GROUP BY         (I_CodiContri) 
    ) as interior
    where interior.i_anio > 2015
    and interior.SALDO = 0
    group by i_anio

    me sale error I_Anio (Nombre de columna 'I_Anio' no valido)
    jueves, 2 de mayo de 2019 13:55
  • Hola Draig_Alonso:

    SELECT COUNT(*) AS num
    	, i_Anio
    FROM       
    (
        SELECT(I_CodiContri)
    	   , (ROUND((SUM(M_Cargo) - SUM(M_TotalAbono)), 2)) [SALDO]
    	   , i_Anio
        FROM  
    	    R_CTACORRIENTE
        GROUP BY(I_CodiContri)
    		, i_anio
    ) AS interior
    WHERE  interior.i_anio > 2015
    	  AND interior.SALDO = 0
    GROUP BY i_anio;
    Omití la columna en la tabla interior.

    jueves, 2 de mayo de 2019 19:08
  • Hola Draig_Alonso:

    SELECT COUNT(*) AS num
    	, i_Anio
    FROM       
    (
        SELECT(I_CodiContri)
    	   , (ROUND((SUM(M_Cargo) - SUM(M_TotalAbono)), 2)) [SALDO]
    	   , i_Anio
        FROM  
    	    R_CTACORRIENTE
        GROUP BY(I_CodiContri)
    		, i_anio
    ) AS interior
    WHERE  interior.i_anio > 2015
    	  AND interior.SALDO = 0
    GROUP BY i_anio;
    Omití la columna en la tabla interior.

    En mi data también tengo Saldo inferior a cero (negativos) ya que pagaron sin embargo pagó de más; al colocar:  

    interior.SALDO <= 0

    ¿me cuenta también los negativos?

    Hice 2 consultas independientes que me muestran los Saldos negativos y los Saldos que son =0, sin embargo en la consulta para que me muestre los negativos y los 0 me muestra algunas 0 y no todos como desearía yo

                                    -- DEUDA =0 --
    SELECT I_CodiContri [Cod. Contribuyente]
    ,SALDO = ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)
    FROM R_CTACORRIENTE
    WHERE (I_Anio= 2015) 
    GROUP BY I_CodiContri
    HAVING (SUM(M_Cargo))<=0

    ---------------------------------------------------------------------------------

                                -- DEUDA = -0 --
    SELECT I_CodiContri [Cod. Contribuyente]
    ,SALDO = ROUND ((SUM(M_Cargo)-SUM(M_TotalAbono)),2)
    FROM R_CTACORRIENTE
    WHERE (I_Anio= 2015)
    AND M_Cargo < M_TotalAbono 
    GROUP BY I_CodiContri
    HAVING (SUM(M_Cargo))<=0

    Gracias de antemano. 

    jueves, 2 de mayo de 2019 20:12
  • Hola Draig_Alonso:

    interior<=0 Es correcto.

    En las dos consultas que muestras tienes un having 

    HAVING (SUM(M_Cargo))<=0

    No parece correcto.

    Empecemos por partes, si la consulta no es visual, quítale el round, y muestra las dos columnas para que sepas realmente lo que ocurre.

    SELECT I_CodiContri AS [Cod. Contribuyente]
    	, SUM(M_Cargo)
    	, SUM(M_ABONO)
    	, SUM(M_CARGO) - SUM(M_ABONO) AS SALDO
    FROM   
    	R_CTACORRIENTE
    WHERE  (I_Anio = 2015)
    GROUP BY I_CodiContri
    HAVING SUM(M_CARGO) - SUM(M_ABONO) <= 0
    ORDER BY SALDO DESC;

    jueves, 2 de mayo de 2019 20:40