none
Suma de Filas En una Columna con filtro RRS feed

  • Pregunta

  • Buen día

    Necesito sumar el la columna Pago hasta llegar a un moto determinado (Eje. 9000)

    De la siguiente tabla necesito filtrar por CodigoPredio y por Estado (Pago) y ordenado por Año ya que tengo datos desde el año 2000 hasta el 2017 con el fin de ir sumando desde un año menor a uno mayor

    Y como resultado me de la cantidad de años (Filas) en enteros Afectadas por la suma.

    ME pueden ayudar con esto? 


    JorgeLeonardoDC

    jueves, 19 de abril de 2018 21:44

Respuestas

  • Hola JorgeLeonardoDC:

    declare @cantidadFiltrado int= 9000;
    with cte ( FILA,TOTAL)
    AS (
    	SELECT ROW_NUMBER () OVER(ORDER BY AÑO) AS FILA,  SUM(PAGO) OVER (ORDER BY AÑO) AS TOTAL
    		FROM 
    			PAGADOR 
    	)
    SELECT 
    	MAX(FILA)AS NUMAÑOS FROM cte WHERE TOTAL < @cantidadFiltrado;
    	

    Un saludo

    • Marcado como respuesta JorgeDiazC martes, 24 de abril de 2018 16:29
    lunes, 23 de abril de 2018 21:14
  • declare @cantidadFiltrado int= 9000;
    with cte ( FILA,TOTAL)
    AS (
    	SELECT ROW_NUMBER () OVER(ORDER BY AÑO) AS FILA,  SUM(PAGO) OVER (ORDER BY AÑO) AS TOTAL
    		FROM 
    			PAGADOR 
    where CodigoPredido = '000100010004000'
    	)
    SELECT 
    	MAX(FILA)AS NUMAÑOS FROM cte WHERE TOTAL < @cantidadFiltrado;
    Solo faltaba la clausula Where  y ya!
    funciono muy bien 
    Muchas Gracias Javi Fernández F

    JorgeLeonardoDC

    • Marcado como respuesta JorgeDiazC martes, 24 de abril de 2018 16:29
    martes, 24 de abril de 2018 16:29

Todas las respuestas

  • Hola JorgeLeonardoDC:

    No entiendo del todo bien lo que intentas hacer, aunque me supongo que los tiros iran por algo así.

    create table PAGADOR (codigopedido varchar(20), año int, pago float, estado varchar(10))
    go
    insert into PAGADOR (codigopedido, AÑO, PAGO, ESTADO)
    VALUES
    ('000100010002000', 2017, 6469.50,'NO PAGO'),
    ('000100010003000', 2017, 0,'PAGO'),
    ('000100010004000', 2017, 593.75,'NO PAGO'),
    ('000100010005000', 2017, 0,'PAGO'),
    ('000100010006000', 2017, 650.75,'NO PAGO'),
    ('000100010007000', 2017, 688.75,'NO PAGO'),
    ('000100010008000', 2017, 907.25,'NO PAGO'),
    ('000100010009000', 2017, 12283.50,'NO PAGO'),
    ('000100010011000', 2017, 11504.50,'NO PAGO'),
    ('000100010013000', 2017, 5747.50,'NO PAGO'),
    ('000100010014000', 2017, 10868.00,'NO PAGO')
    GO
    
    SELECT SUM(PAGO), AÑO, LAG(SUM(PAGO)) OVER(PARTITION BY AÑO ORDER BY AÑO) AS ANTERIOR,
    LEAD(SUM(PAGO)) OVER(PARTITION BY AÑO ORDER BY AÑO) AS POSTERIOR
    
     FROM PAGADOR
    WHERE
    	CONVERT(BIGINT ,codigopedido) BETWEEN 100010003000 AND 100010014000
    	AND ESTADO = 'NO PAGO'
    GROUP BY año
    HAVING SUM(PAGO)<1500000
    ORDER BY AÑO

    Espero te ayude, sino creo que tendrás que matizar un poco mejor la info.

    Saludos

    viernes, 20 de abril de 2018 6:50
  • No me entendiste..
    El filtro del código solo debe ser por un dato. eje: 000100010004000 para que busque los años de este código no mas, y luego ir sumando el valor de la columna PAGO hasta llegar al valor dado Eje: 9000.
    Todo esto con el fin de contar los años o las filas afectadas por esta suma (los años ordenados de menor a mayor)

    JorgeLeonardoDC

    lunes, 23 de abril de 2018 16:07
  • Hola:

    Entonces solo tiene que recoger de la tabla los registros que encajen con el codigopedido = 000100010004000

    sumar el valor de pago para esos registros hasta llegar a 9000, que en este caso solo la suma sería por la fila

    '000100010004000', 2017, 593.75,'NO PAGO')

    y la salida de este resultado sería ????

    Para entender bien la salida, te voy a completar yo con ese codigo unos registros y dime que quieres tener.

    insert into PAGADOR (codigopedido, AÑO, PAGO, ESTADO)
    VALUES
    ('000100010004000', 2010, 6469.50,'NO PAGO'),
    ('000100010004000', 2011, 6450,'PAGO'),
    ('000100010004000', 2012, 2000,'NO PAGO'),
    ('000100010004000', 2013, 1000,'PAGO'),
    ('000100010004000', 2014, 2400.75,'NO PAGO'),
    ('000100010004000', 2015, 688.75,'PAGO'),
    ('000100010004000', 2016, 4079.25,'PAGO')

    Saludos

    lunes, 23 de abril de 2018 16:22
  • Esta es el resultado de la consulta con un solo codigo, pero no es lo que necesito.  
    la suma de la columna PAGO debe ser un filtro, y el resultado de la consulta debe ser cuantas filas se afectaron hasta llegar a ese tope (Sum(Pago<9000))


    JorgeLeonardoDC

    lunes, 23 de abril de 2018 16:31
  • Hola JorgeLeonardoDC:

    SELECT sum(pago), AÑO
    
     FROM PAGADOR
    WHERE
    	CONVERT(BIGINT ,codigopedido)= 100010004000
    	AND ESTADO = 'NO PAGO'
    GROUP BY año
    HAVING SUM(PAGO)<9000
    ORDER BY AÑO

    Con este escenario, la consulta devuelve,

    (Sin nombre de columna)    AÑO
    6469,5    2010
    2000    2012
    2400,75    2014
    593,75    2017

    Cual es el resultado que tu esperas?

    lunes, 23 de abril de 2018 17:07
  • lo que espero es que me diga cuantos años necesito para cubrir la suma: Sum(PAGO<9000)

    como ejemplo: 

    SUM(PAGO<2000)

    2000 = 500

    2001 = 700

    2002 = 800

    2003 = 700

    2004 = 900

    2005 = 800

    Resultado: Años = (3)


    JorgeLeonardoDC

    lunes, 23 de abril de 2018 19:56
  • Hola JorgeLeonardoDC:

    declare @cantidadFiltrado int= 9000;
    with cte ( FILA,TOTAL)
    AS (
    	SELECT ROW_NUMBER () OVER(ORDER BY AÑO) AS FILA,  SUM(PAGO) OVER (ORDER BY AÑO) AS TOTAL
    		FROM 
    			PAGADOR 
    	)
    SELECT 
    	MAX(FILA)AS NUMAÑOS FROM cte WHERE TOTAL < @cantidadFiltrado;
    	

    Un saludo

    • Marcado como respuesta JorgeDiazC martes, 24 de abril de 2018 16:29
    lunes, 23 de abril de 2018 21:14
  • declare @cantidadFiltrado int= 9000;
    with cte ( FILA,TOTAL)
    AS (
    	SELECT ROW_NUMBER () OVER(ORDER BY AÑO) AS FILA,  SUM(PAGO) OVER (ORDER BY AÑO) AS TOTAL
    		FROM 
    			PAGADOR 
    where CodigoPredido = '000100010004000'
    	)
    SELECT 
    	MAX(FILA)AS NUMAÑOS FROM cte WHERE TOTAL < @cantidadFiltrado;
    Solo faltaba la clausula Where  y ya!
    funciono muy bien 
    Muchas Gracias Javi Fernández F

    JorgeLeonardoDC

    • Marcado como respuesta JorgeDiazC martes, 24 de abril de 2018 16:29
    martes, 24 de abril de 2018 16:29