none
Actualizar tabla con clausula SUM de otra tabla RRS feed

  • Pregunta

  • Hola buen dia necesito actualizar una tabla, basada en la suma de otra tabla, lo realizo de la siguiente manera, pero no me esta funcionando, pueden ayudarme?

    UPDATE Table1
    SET Table1.QtyTotal = t.TotalQty
    FROM TablaNueva AS Table1
    INNER JOIN
        (
    SELECT NumeroItem, COALESCE(SUM(Qty1),0) - COALESCE(SUM(Qty2), 0) as TotalQty FROM Table2 
    group by NumeroItem, TotalQty
        ) t
        ON t.NumeroItem = Table1.NumeroItem

    Pueden guiarme, sobre si estoy realizando algo mal?.

    lunes, 1 de abril de 2019 16:23

Respuestas

  • Hola Pollokullos:

    Dentro de la tabla derivada, estas llamando a TotalQty en group by y eso no es correcto.

    Los alias de columna se ejecutan a posteriori de Group by. (Orden de ejecución From, Where, Group by, Having, Select, Order by). Por tanto no existe group by NumeroItem, TotalQty

    Además me supongo que tu objetivo es un valor único, de lo cual deduzco que será Group by NumeroItem a secas.

    CREATE TABLE Table2
    (numeroItem INT
    , Qty1       INT
    , Qty2       INT
    );
    GO
    
    CREATE TABLE Table1
    (QtyTotal   INT
    , numeroItem INT
    );
    GO
    
    INSERT INTO table1
    (qtyTotal
    , numeroItem
    )
    VALUES
    (0
    , 1
    );
    
    INSERT INTO table2
    (numeroItem
    , Qty1
    , Qty2
    )
    VALUES
    (1
    , 5
    , 10
    );
    /* Tu sentencia */
    
    UPDATE Table1
      SET     
       Table1.QtyTotal = t.TotalQty
    FROM   Table1 AS Table1
    		  INNER JOIN
    (
        SELECT NumeroItem
    	    , COALESCE(SUM(QTY1), 0) - COALESCE(SUM(Qty2), 0) AS TOTALQTY
        FROM   
    	    TABLE2
        GROUP BY numeroItem
    ) t ON t.numeroItem = Table1.numeroItem;
    go
    /*Resultado */
    SELECT Table1.QtyTotal
    	, Table1.numeroItem
    FROM   
    	Table1;

    • Marcado como respuesta Pollokullos lunes, 1 de abril de 2019 16:49
    lunes, 1 de abril de 2019 16:36

Todas las respuestas

  • Hola Pollokullos:

    Dentro de la tabla derivada, estas llamando a TotalQty en group by y eso no es correcto.

    Los alias de columna se ejecutan a posteriori de Group by. (Orden de ejecución From, Where, Group by, Having, Select, Order by). Por tanto no existe group by NumeroItem, TotalQty

    Además me supongo que tu objetivo es un valor único, de lo cual deduzco que será Group by NumeroItem a secas.

    CREATE TABLE Table2
    (numeroItem INT
    , Qty1       INT
    , Qty2       INT
    );
    GO
    
    CREATE TABLE Table1
    (QtyTotal   INT
    , numeroItem INT
    );
    GO
    
    INSERT INTO table1
    (qtyTotal
    , numeroItem
    )
    VALUES
    (0
    , 1
    );
    
    INSERT INTO table2
    (numeroItem
    , Qty1
    , Qty2
    )
    VALUES
    (1
    , 5
    , 10
    );
    /* Tu sentencia */
    
    UPDATE Table1
      SET     
       Table1.QtyTotal = t.TotalQty
    FROM   Table1 AS Table1
    		  INNER JOIN
    (
        SELECT NumeroItem
    	    , COALESCE(SUM(QTY1), 0) - COALESCE(SUM(Qty2), 0) AS TOTALQTY
        FROM   
    	    TABLE2
        GROUP BY numeroItem
    ) t ON t.numeroItem = Table1.numeroItem;
    go
    /*Resultado */
    SELECT Table1.QtyTotal
    	, Table1.numeroItem
    FROM   
    	Table1;

    • Marcado como respuesta Pollokullos lunes, 1 de abril de 2019 16:49
    lunes, 1 de abril de 2019 16:36
  • Muchas gracias, es correcto como dices. me funciono bien.
    lunes, 1 de abril de 2019 16:49