none
BUSCAR, ACTUALIZAR Y ELIMINAR EN SQL RRS feed

  • Pregunta

  • Bunea tarde compañeros, tengo una tarea que hacer, necesito ingresar a un servidor realizar un select y de los campos que me traiga ese select tengo que sumar algunos campos y dejar un solo registo con la suma de todos y eliminar el resto, tengo consultas por separado, que lo estan haciendo, pero como puedo unirlas y que me salgan mas eficientes, me posdrian ayudar.

    --este select me trae los registros de la base que pueden ser 10 folios y cada folio esta repetio

    Select tipoId,cabcera, count(cabcera) From movimientos with(nolock) Group by cabcera,cabcera having count(cabcera) > 1

    ---con este select selecciono uno de los registros que trae la consulta, que por lo regular son 2

    SELECT * FROM movimientos WHERE MovID= 2068.

    --este actualiza los campos sumando los del resultado

    Update movimientos
    set SubTot = sum(SubTot),Iva=SUM(Iva),cabTotal=SUM(cabTotal),Efectivo=SUM(Efectivo),Cambio=SUM(Cambio)
    from movimientos
    where MovID= 2068.

    espero me orienten a como puedo juntar las consultas, y al ultimo eliminar uno de los registros.

    Saludos!!!

    viernes, 16 de marzo de 2018 1:01

Respuestas

  • Si en la base de datos no existen tablas que dependan de la tabla 'Movimientos' entonces lo simple será realizar los siguientes pasos:

    - Copiar los datos a una tabla temporal.

    - Eliminar todas las filas de la tabla origen, o sólo las filas que no son únicas.

    - Copiar filas únicas a la tabla origen.

    Por ejemplo:

    CREATE TABLE #Movimientos (id int, tipo int, importe decimal(10, 2));
    INSERT INTO #Movimientos VALUES
        (1, 1, 100),
        (1, 1, 200),
        (2, 1, 100),
        (2, 1, 200),
        (2, 1, 300),
        (3, 1, 100);
    
    -- Step 1
    SELECT * INTO #Temp FROM #Movimientos;
    -- Step 2
    TRUNCATE TABLE #Movimientos;
    -- Step 3
    INSERT INTO #Movimientos SELECT id, tipo, SUM(importe) FROM #Temp GROUP BY id, tipo;
    GO
    
    SELECT * FROM #Movimientos;
    
    DROP TABLE #Temp;
    DROP TABLE #Movimientos;
    GO


    viernes, 16 de marzo de 2018 2:24

Todas las respuestas

  • Si en la base de datos no existen tablas que dependan de la tabla 'Movimientos' entonces lo simple será realizar los siguientes pasos:

    - Copiar los datos a una tabla temporal.

    - Eliminar todas las filas de la tabla origen, o sólo las filas que no son únicas.

    - Copiar filas únicas a la tabla origen.

    Por ejemplo:

    CREATE TABLE #Movimientos (id int, tipo int, importe decimal(10, 2));
    INSERT INTO #Movimientos VALUES
        (1, 1, 100),
        (1, 1, 200),
        (2, 1, 100),
        (2, 1, 200),
        (2, 1, 300),
        (3, 1, 100);
    
    -- Step 1
    SELECT * INTO #Temp FROM #Movimientos;
    -- Step 2
    TRUNCATE TABLE #Movimientos;
    -- Step 3
    INSERT INTO #Movimientos SELECT id, tipo, SUM(importe) FROM #Temp GROUP BY id, tipo;
    GO
    
    SELECT * FROM #Movimientos;
    
    DROP TABLE #Temp;
    DROP TABLE #Movimientos;
    GO


    viernes, 16 de marzo de 2018 2:24
  • escribiendo de memoria y por si te lias con las tablas temporales que proponía willams

    update m set set SubTot = m2.SubTot,Iva=m2.iva,cabTotal=m2.cabTotal,Efectivo=m2.Efectivo,Cambio=m2.Cambio

    from movimientos m inner join (select movid,sum(subtot) subtot,sum(iva) iva, sum(cabtotal) cabtotal, sum(efectivo)efectivo, sum(cambio) cambio group by movid) m2 on m.movid=m2.movid

    where m.movid=2068


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 16 de marzo de 2018 6:46
    Moderador