• Miércoles 1 de Mayo de 2024, 06:36

Autor Tema:  Problema con consulta select into y subconsulta  (Leído 1517 veces)

edwinreinoso

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema con consulta select into y subconsulta
« en: Sábado 19 de Julio de 2008, 15:17 »
0
Saludos. Tengo un problema al insertar los registros de una tabla a otra. El caso es el siguiente:

- Tabla origen: tabDetCompra
- Tabla destino: tabKardex

INSERT INTO tabKardex(
      CodProd_kar,
      Concepto_kar,
      Fecha_kar,
      FecRegBD_kar,
      CantIngreso_kar,
      VuIngreso_kar,
      VtIngreso_kar,
      CantSaldo_kar)
SELECT    CodProd_dtc,
      'COMPRA'
      UniMed_dtc,
      @FechaCompra_com,
      getdate(),
      (Cant_dtc*Rela_dtc),
      (Vt_dtc / (Cant_dtc*Rela_dtc)),
      Vt_dtc,
               (Cant_dtc*Rela_dtc) + (select isnull(sum(CantIngreso_kar),0) - isnull(sum(CantSalida_kar),0) from tabKardex where CodProd_kar = CodProd_dtc)
FROM tabDetCompra WHERE NumCompra_dtc = @NumeroCompra
      
La consulta la ejecuté por partes y lo que aparece sin resaltar está correcto. La parte que está marcada es la que me da problemas.


La idea es que la parte resaltada es una subconsulta que devuelve la diferencia de la sumatoria de dos columnas:
sum(CantIngreso_kar) - sum(CantSalida_kar), que se encuentran en tabla destino osea tabKardex. Esto se realiza con la finalidad de ingresar en la fila que se está insertando la cantidad actual de productos, es decir los productos que habian mas los productos que es este momento están ingresando (Cant_dtc*Rela_dtc).

Lo que no puedo obtener es cuantos productos habían para sumar con los productos que estoy insertando.

juan_0986

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: pe
    • Ver Perfil
Re: Problema con consulta select into y subconsulta
« Respuesta #1 en: Miércoles 30 de Julio de 2008, 18:14 »
0
claro que si ejecutas por separado no hay problema por que la senetencia se lee bien, pero estas concatenando mal tu instruccion, 1. a ese insert le falta un values, 2. no puede meter un select de esa forma dentro de un insert, ese select no te dice nada ni siquiera hace referencia a tu tabla de origen.

esa sub consulta de (select isnull(sum(CantIngreso_kar),0) - isnull(sum(CantSalida_kar),0) from tabKardex where CodProd_kar = CodProd_dtc) esta bien, ese no es el problema.

lo que puedes hacer alli es crearte un trigger que se dispare cuando hagas un insert o un update en la tabla de origen, para que desde alli insertes los valores a la tabla del kardex; me imagino que manejas los triggers no???

edwinreinoso

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema con consulta select into y subconsulta
« Respuesta #2 en: Miércoles 30 de Julio de 2008, 23:04 »
0
Esta es una parte de mi procedimiento almacenado en el que hago una inserción en el kardex cada vez que se
registra una compra....

-----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
-- REGISTRO EN LA TABLA DE KARDEX LAS ENTRADAS DE LAS
-- MERCADERIAS COMPRADAS
-----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------
declare @CodProd as varchar(80)
declare @Cant as numeric(38,10)
declare @VunIngreso as numeric(38,10)
declare @VtoIngreso as numeric(38,10)
declare @NuevaCantidad as numeric(38,10)
declare @NuevoVTSaldo as numeric(38,10)

-- la parte de la subconsulta la solucioné con un cursor
-- tengo entendido que esto no es óptimo por lo de los bloqueos


DECLARE curDetCompra CURSOR FOR SELECT  CodProd_dtc,
                  @FechaCompra_com,
                  (Cant_dtc*Rela_dtc),
                  (Vt_dtc / (Cant_dtc*Rela_dtc)),
                  Vt_dtc
               FROM tabDetCompra where NumCompra_dtc = @NumeroCompra
               ORDER by Item_dtc asc

OPEN curDetCompra
FETCH NEXT FROM curDetCompra into @CodProd, @FechaCompra_com, @Cant, @VunIngreso, @VtoIngreso
    WHILE @@FETCH_STATUS = 0
    BEGIN
      set @NuevaCantidad =  @Cant + dbo.UltimaCantKardex(@CodProd)
      set @NuevoVTSaldo =  @VtoIngreso + dbo.UltimoVTKardex(@CodProd)
      INSERT INTO tabKardex(
      CodProd_kar,
      Concepto_kar,
      Fecha_kar,
      FecRegBD_kar,
      CantIngreso_kar,
      VuIngreso_kar,
      VtIngreso_kar,
      CantSaldo_kar,
      VuSaldo_kar,
      VtSaldo_kar)
      values (
      @CodProd,
      'COMPRA',
      @FechaCompra_com,
      getdate(),
      @Cant,
      @VunIngreso,
      @VtoIngreso,
      @NuevaCantidad,
      @NuevoVTSaldo / @NuevaCantidad,
      @NuevoVTSaldo)
        FETCH NEXT FROM curDetCompra into @CodProd, @FechaCompra_com, @Cant, @VunIngreso, @VtoIngreso
    END
close curDetCompra
DEALLOCATE curDetCompra
-----------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------


Quería seleccionar todos los datos de la tabla detalle de compra e insertarlos en la tabla de kardex, esto con subconsulta
se podia solucionar, lo que no pude y no sé si se podrá es si al momento de insertar actualizar los valores de los saldos....

Sin embargo con el cursor le solucioné pero me quedé con las ganas de meter todo en una subconsulta...
 Claro que con un disparador también se puede. ¿Qué será mejor dejar el cursor o crear un disparador para que me actualice los valores?. Que será más óptimo?