none
HACER UN UPDATE TOMANDO EL MAXIMO VALOR DE LA COLUMNA DE FORMA CONDICIONADA RRS feed

  • Pregunta

  • Hola,

    Trabajo con SQL Server 2014 y tengo el siguiente problema:

    Tengo en mi base de datos la siguiente tabla:

    DECLARE @Ventas AS TABLE
    (
       NumeroMes  Int ,
       Año Int,
       ImporteVenta decimal(15,5)   
    )
    
    ;
    INSERT INTO @Ventas
    VALUES(1,2011,24.5),
     (1,2011,25.5),
     (1,2011,14),
     (1,2011,1.5),
     (2,2012,11.5),
     (2,2012,9.24),
     (3,2013,8.74),
     (3,2013,22.5),
     (3,2011,11.4),
     (4,2013,6.5);
    
    

    Pues bien, necesito que el valor ImporteVenta para cada mes y año distinto coja el maximo valor para ese campo en dichos meses y años. Es decir, todas las filas con mes 3 y año 2013 deberian tener en importeventa 22,5 puesto que es la mayor cifra para el mes 3 y año 2013 que existe.

    Concretamente mi tabla deberia quedar:

    ¿se os ocurre cómo podría desarrollarse este update?

    Muchas gracias

    Angel

    lunes, 5 de diciembre de 2016 17:48

Respuestas

  • Angeleci,

    Puedes hacer lo siguiente:

    WITH T AS
    (
        SELECT 
    	   t1.NumeroMes, t1.Año,
    	   MAX(t1.ImporteVenta) AS 'Maximo'
        FROM 
    	   @Ventas t1
        GROUP BY
    	   t1.NumeroMes, t1.Año,
    )
    UPDATE  v
    SET
        v.ImporteVenta = t1.Maximo
    FROM
        @Ventas v
        INNER JOIN T t1 ON (v.NumeroMes = t1.NumeroMes)
    	   AND (v.Año = t1.Año);



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Editado Willams Morales lunes, 5 de diciembre de 2016 18:09
    • Propuesto como respuesta Joyce_ACModerator lunes, 5 de diciembre de 2016 18:23
    • Marcado como respuesta Angeleci lunes, 5 de diciembre de 2016 19:21
    lunes, 5 de diciembre de 2016 18:00

Todas las respuestas

  • Angeleci,

    Puedes hacer lo siguiente:

    WITH T AS
    (
        SELECT 
    	   t1.NumeroMes, t1.Año,
    	   MAX(t1.ImporteVenta) AS 'Maximo'
        FROM 
    	   @Ventas t1
        GROUP BY
    	   t1.NumeroMes, t1.Año,
    )
    UPDATE  v
    SET
        v.ImporteVenta = t1.Maximo
    FROM
        @Ventas v
        INNER JOIN T t1 ON (v.NumeroMes = t1.NumeroMes)
    	   AND (v.Año = t1.Año);



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Editado Willams Morales lunes, 5 de diciembre de 2016 18:09
    • Propuesto como respuesta Joyce_ACModerator lunes, 5 de diciembre de 2016 18:23
    • Marcado como respuesta Angeleci lunes, 5 de diciembre de 2016 19:21
    lunes, 5 de diciembre de 2016 18:00
  • Gracias Willams.

    Me sirvio correctamente.

    lunes, 5 de diciembre de 2016 19:22