Suma detalle y hacer join

07/01/2004 - 18:34 por Julio | Informe spam
Hola grupo tengo el siguiente problema haber si me pueden dar una mano.

Tengo que crear uan base de datos para generar una orden de compra ya que
esta se lleva en excel.

Tengo creada una tabla llamada ordendecompra y una tabla llamada
detalleDeCompras
en la tabla ordendecompra pongo los encabezado de la ordenes de compras y en
detalles tengo los item que se van agregando en la orden de compra
En la tabla ordendecompras tengo un campo llamado total que es quien contine
el total de la suma de cada item con requerencia al campo compraID
lo que quiero hacer es un join para unir ambas tablas y hacer una sola, pero
cuando hago el Join el total se me retipe por cada Item de la orden, Lo que
quiero saber es como se implementa este tipo de base de datos ? Quiero saber
si es correcto lo que tengo y como puedo resolver el problema que tengo.

Nota:
Quiero saber como puedo unir ambas tabla.

Gracias.



Create table OrdenDeCompra
(CompraID int identity(1,1)
primary key clustered,
OrdenNumero varchar (20)not null
constraint U_OrdenNumero unique (OrdenNumero),
suplidorID int not null,
RequisicionID int not null,
Ordencancelada varchar (15)null,
Cargado varchar not null,
fecha datetime not null,
Empleado varchar (30) DEFAULT SUSER_Sname(),
status varchar (200),
Condicion bit default (1),
Nota varchar (200),
ParaUso varchar (30),
Condiciones varchar (20),
Solicitado varchar (30)not null,
Total money,
Constraint FK_SuplidorID_OrdenDeCompra foreign key (SuplidorID)
references Suplidor (SuplidorID),
Constraint FK_RequisicionesID_OrdenDeCompra foreign key (RequisicionID)
references RequisicionPorDepartamento (RequisicionID)on delete cascade,
)

go

Create table detalleDeCompras
(detalleid int identity(1,1)
Primary key,
CompraID int,
Articulo varchar (25)not null,
Descripcion varchar (200) null,
Cantidad Money not null,
Unidad varchar (30) not null,
PrecioUnitario Money not null,
SubTotal as (cantidad * PrecioUnitario),
constraint detalleDeCompras_OrdenDeCompra foreign key (CompraID)
references OrdenDecompra (CompraID)on delete cascade)

go
SELECT dbo.OrdenDeCompra.OrdenNumero, dbo.OrdenDeCompra.suplidorID,
dbo.OrdenDeCompra.RequisicionID, dbo.OrdenDeCompra.Ordencancelada,
dbo.OrdenDeCompra.Cargado, dbo.OrdenDeCompra.fecha,
dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
dbo.OrdenDeCompra.Condicion, dbo.OrdenDeCompra.Nota,
dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
dbo.OrdenDeCompra.Solicitado,
dbo.detalleDeCompras.Articulo, dbo.detalleDeCompras.Descripcion,
dbo.detalleDeCompras.Cantidad,
dbo.detalleDeCompras.Unidad, dbo.detalleDeCompras.PrecioUnitario,
dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
FROM dbo.OrdenDeCompra INNER JOIN dbo.detalleDeCompras ON
dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
WHERE (dbo.OrdenDeCompra.Condicion = 1)

Go
create trigger Insert_detalleDeCompras
on detalleDeCompras
for insert,update,delete
as
if @@rowcount = 0
return
update ordenDecompra
set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
from detalleDeCompras
where detalleDeCompras.CompraID=ordendecompra.compraID)
from detalleDeCompras inner Join ordendecompra on
detalleDeCompras.compraid=ordendecompra.compraid

Preguntas similare

Leer las respuestas

#11 Julio
08/01/2004 - 15:57 | Informe spam
Precisamente asi es que lo tengo, tengo una tabla de encabezado el cual
contiene un campo calculado de la otra tablas de los detalles.
"Norman A. Armas" wrote in message
news:
Para eso que quieres hacer lo que te recomiendo es que pongas en la tabla


de
encabezado un campo calculado el cual apuntaria a una funcion que a su vez
seria la que calcularia el total de la tabla detalles.
Particularmente no se que objetivo quieres lograr con esto pero eso creo


que
seria la mejor solucion

Saludos


Norman



"Julio" wrote in message
news:
> Lo probe pero sigue el problema, aun cuando borro todo los detalles el
total
> se mantiene en la otra tabla con la misma informacion, me doy cuenta que
el
> insert se aplica bien pero el update no ni el delete
>
> "Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>
> wrote in message news:
> > que tal si probas esto:
> >
> >
> > create trigger Insert_detalleDeCompras8
> > on detalleDeCompras
> > for insert,update,delete
> > as
> > if @@rowcount = 0
> > return
> > update ordenDecompra
> > set ordenDecompra.total= ordenDecompra.total + (select
> > sum(inserted.Subtotal)
> > from inserted
> > where inserted.CompraID=ordendecompra.compraID)
> > from inserted inner Join ordendecompra on
> > Inserted.compraid=ordendecompra.compraid
> >
> >
> > pd: ahora yo te recomiendo lo que ha dicho Miguel, en lugar de un
trigger
> > usar una vista Idexada ;-)
> >
> > Salu2
> > Maximiliano Damian Accotto
> >
> >
> > "Julio" escribió en el mensaje
> > news:
> > > Estoy tratando de utilizar las tablas Virtuales de los trigger pero
esto
> > no
> > > me funciona, cuando instrodusco un nuevo registro en total me pode


el
> > valor
> > > que hay en ese nuevo registro pero no me suma los demas registro que
> > > pertenecen a esa orden.
> > >
> > > Este es el codigo.
> > >
> > > create trigger Insert_detalleDeCompras8
> > > on detalleDeCompras
> > > for insert,update,delete
> > > as
> > > if @@rowcount = 0
> > > return
> > > update ordenDecompra
> > > set ordenDecompra.total=(select sum(inserted.Subtotal)
> > > from inserted
> > > where inserted.CompraID=ordendecompra.compraID)
> > > from inserted inner Join ordendecompra on
> > > Inserted.compraid=ordendecompra.compraid
> > >
> > >
> > > "Miguel Egea" wrote in message
> > > news:
> > > > Veamos por partes
> > > > lo primero que quieres hacer es un sumatorio
> > > > en tu caso podría ser algo parecido a esto
> > > >
> > > > /* codigo sin probar */
> > > > Select Compraid,sum(Subtotal) Total
> > > > from OrdenDeCompra o inner join detalledecompras d
> > > > on o.Compraid=d.compraid
> > > > group by compraid
> > > >
> > > > El trigger que declaras en tu pie esta mal implementado,
> > > > Los triggers tienen dos tablas virtuales que existen per-se que


son
> > > inserted
> > > > y deleted
> > > > Busca en http://www.portalsql.com por tirggers y verás varios
> ejemplos,
> > > > simplemente amoldalo a tu necesidad.
> > > >
> > > > El otro día tuvimos una pequeña charla en este mismo grupo sobre


si
> > > triggers
> > > > o vistas indexadas, creo que sería enriquecedor paratí que lo
leyeses.
> > > >
> > > >
> > > > Saludos
> > > > Miguel Egea
> > > >
> > > >
> > > > "Julio" escribió en el mensaje
> > > > news:
> > > > > Hola grupo tengo el siguiente problema haber si me pueden dar


una
> > mano.
> > > > >
> > > > > Tengo que crear uan base de datos para generar una orden de


compra
> ya
> > > que
> > > > > esta se lleva en excel.
> > > > >
> > > > > Tengo creada una tabla llamada ordendecompra y una tabla llamada
> > > > > detalleDeCompras
> > > > > en la tabla ordendecompra pongo los encabezado de la ordenes de
> > compras
> > > y
> > > > en
> > > > > detalles tengo los item que se van agregando en la orden de


compra
> > > > > En la tabla ordendecompras tengo un campo llamado total que es
quien
> > > > contine
> > > > > el total de la suma de cada item con requerencia al campo


compraID
> > > > > lo que quiero hacer es un join para unir ambas tablas y hacer


una
> > sola,
> > > > pero
> > > > > cuando hago el Join el total se me retipe por cada Item de la
orden,
> > Lo
> > > > que
> > > > > quiero saber es como se implementa este tipo de base de datos ?
> Quiero
> > > > saber
> > > > > si es correcto lo que tengo y como puedo resolver el problema


que
> > tengo.
> > > > >
> > > > > Nota:
> > > > > Quiero saber como puedo unir ambas tabla.
> > > > >
> > > > > Gracias.
> > > > >
> > > > >
> > > > >
> > > > > Create table OrdenDeCompra
> > > > > (CompraID int identity(1,1)
> > > > > primary key clustered,
> > > > > OrdenNumero varchar (20)not null
> > > > > constraint U_OrdenNumero unique (OrdenNumero),
> > > > > suplidorID int not null,
> > > > > RequisicionID int not null,
> > > > > Ordencancelada varchar (15)null,
> > > > > Cargado varchar not null,
> > > > > fecha datetime not null,
> > > > > Empleado varchar (30) DEFAULT SUSER_Sname(),
> > > > > status varchar (200),
> > > > > Condicion bit default (1),
> > > > > Nota varchar (200),
> > > > > ParaUso varchar (30),
> > > > > Condiciones varchar (20),
> > > > > Solicitado varchar (30)not null,
> > > > > Total money,
> > > > > Constraint FK_SuplidorID_OrdenDeCompra foreign key (SuplidorID)
> > > > > references Suplidor (SuplidorID),
> > > > > Constraint FK_RequisicionesID_OrdenDeCompra foreign key
> > (RequisicionID)
> > > > > references RequisicionPorDepartamento (RequisicionID)on delete
> > cascade,
> > > > > )
> > > > >
> > > > > go
> > > > >
> > > > > Create table detalleDeCompras
> > > > > (detalleid int identity(1,1)
> > > > > Primary key,
> > > > > CompraID int,
> > > > > Articulo varchar (25)not null,
> > > > > Descripcion varchar (200) null,
> > > > > Cantidad Money not null,
> > > > > Unidad varchar (30) not null,
> > > > > PrecioUnitario Money not null,
> > > > > SubTotal as (cantidad * PrecioUnitario),
> > > > > constraint detalleDeCompras_OrdenDeCompra foreign key (CompraID)
> > > > > references OrdenDecompra (CompraID)on delete cascade)
> > > > >
> > > > > go
> > > > > SELECT dbo.OrdenDeCompra.OrdenNumero,
> > dbo.OrdenDeCompra.suplidorID,
> > > > > dbo.OrdenDeCompra.RequisicionID,


dbo.OrdenDeCompra.Ordencancelada,
> > > > > dbo.OrdenDeCompra.Cargado,
> > > dbo.OrdenDeCompra.fecha,
> > > > > dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
> > > > > dbo.OrdenDeCompra.Condicion,
> > > dbo.OrdenDeCompra.Nota,
> > > > > dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
> > > > > dbo.OrdenDeCompra.Solicitado,
> > > > > dbo.detalleDeCompras.Articulo, dbo.detalleDeCompras.Descripcion,
> > > > > dbo.detalleDeCompras.Cantidad,
> > > > > dbo.detalleDeCompras.Unidad,


dbo.detalleDeCompras.PrecioUnitario,
> > > > > dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
> > > > > FROM dbo.OrdenDeCompra INNER JOIN dbo.detalleDeCompras


ON
> > > > > dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
> > > > > WHERE (dbo.OrdenDeCompra.Condicion = 1)
> > > > >
> > > > > Go
> > > > > create trigger Insert_detalleDeCompras
> > > > > on detalleDeCompras
> > > > > for insert,update,delete
> > > > > as
> > > > > if @@rowcount = 0
> > > > > return
> > > > > update ordenDecompra
> > > > > set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
> > > > > from detalleDeCompras
> > > > > where detalleDeCompras.CompraID=ordendecompra.compraID)
> > > > > from detalleDeCompras inner Join ordendecompra on
> > > > > detalleDeCompras.compraid=ordendecompra.compraid
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#12 Julio
08/01/2004 - 16:01 | Informe spam
Tuve una curiosidad por los que me dice Miguel Egea, la cual me dice que el
trigger esta mal implementado, pero me funciona a la perfeccion ya que hace
el insert,delete,update bien. Lo que no se si esto en un futuro me podia
traer problema.

.Este es el codigo

create trigger Insert_detalleDeCompras

on detalleDeCompras

for insert,update,delete

as

if @@rowcount = 0

return

update ordenDecompra

set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)

from detalleDeCompras

where detalleDeCompras.CompraID=ordendecompra.compraID)

from detalleDeCompras inner Join ordendecompra on

detalleDeCompras.compraid=ordendecompra.compraid




"Norman A. Armas" wrote in message
news:
Para eso que quieres hacer lo que te recomiendo es que pongas en la tabla


de
encabezado un campo calculado el cual apuntaria a una funcion que a su vez
seria la que calcularia el total de la tabla detalles.
Particularmente no se que objetivo quieres lograr con esto pero eso creo


que
seria la mejor solucion

Saludos


Norman



"Julio" wrote in message
news:
> Lo probe pero sigue el problema, aun cuando borro todo los detalles el
total
> se mantiene en la otra tabla con la misma informacion, me doy cuenta que
el
> insert se aplica bien pero el update no ni el delete
>
> "Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>
> wrote in message news:
> > que tal si probas esto:
> >
> >
> > create trigger Insert_detalleDeCompras8
> > on detalleDeCompras
> > for insert,update,delete
> > as
> > if @@rowcount = 0
> > return
> > update ordenDecompra
> > set ordenDecompra.total= ordenDecompra.total + (select
> > sum(inserted.Subtotal)
> > from inserted
> > where inserted.CompraID=ordendecompra.compraID)
> > from inserted inner Join ordendecompra on
> > Inserted.compraid=ordendecompra.compraid
> >
> >
> > pd: ahora yo te recomiendo lo que ha dicho Miguel, en lugar de un
trigger
> > usar una vista Idexada ;-)
> >
> > Salu2
> > Maximiliano Damian Accotto
> >
> >
> > "Julio" escribió en el mensaje
> > news:
> > > Estoy tratando de utilizar las tablas Virtuales de los trigger pero
esto
> > no
> > > me funciona, cuando instrodusco un nuevo registro en total me pode


el
> > valor
> > > que hay en ese nuevo registro pero no me suma los demas registro que
> > > pertenecen a esa orden.
> > >
> > > Este es el codigo.
> > >
> > > create trigger Insert_detalleDeCompras8
> > > on detalleDeCompras
> > > for insert,update,delete
> > > as
> > > if @@rowcount = 0
> > > return
> > > update ordenDecompra
> > > set ordenDecompra.total=(select sum(inserted.Subtotal)
> > > from inserted
> > > where inserted.CompraID=ordendecompra.compraID)
> > > from inserted inner Join ordendecompra on
> > > Inserted.compraid=ordendecompra.compraid
> > >
> > >
> > > "Miguel Egea" wrote in message
> > > news:
> > > > Veamos por partes
> > > > lo primero que quieres hacer es un sumatorio
> > > > en tu caso podría ser algo parecido a esto
> > > >
> > > > /* codigo sin probar */
> > > > Select Compraid,sum(Subtotal) Total
> > > > from OrdenDeCompra o inner join detalledecompras d
> > > > on o.Compraid=d.compraid
> > > > group by compraid
> > > >
> > > > El trigger que declaras en tu pie esta mal implementado,
> > > > Los triggers tienen dos tablas virtuales que existen per-se que


son
> > > inserted
> > > > y deleted
> > > > Busca en http://www.portalsql.com por tirggers y verás varios
> ejemplos,
> > > > simplemente amoldalo a tu necesidad.
> > > >
> > > > El otro día tuvimos una pequeña charla en este mismo grupo sobre


si
> > > triggers
> > > > o vistas indexadas, creo que sería enriquecedor paratí que lo
leyeses.
> > > >
> > > >
> > > > Saludos
> > > > Miguel Egea
> > > >
> > > >
> > > > "Julio" escribió en el mensaje
> > > > news:
> > > > > Hola grupo tengo el siguiente problema haber si me pueden dar


una
> > mano.
> > > > >
> > > > > Tengo que crear uan base de datos para generar una orden de


compra
> ya
> > > que
> > > > > esta se lleva en excel.
> > > > >
> > > > > Tengo creada una tabla llamada ordendecompra y una tabla llamada
> > > > > detalleDeCompras
> > > > > en la tabla ordendecompra pongo los encabezado de la ordenes de
> > compras
> > > y
> > > > en
> > > > > detalles tengo los item que se van agregando en la orden de


compra
> > > > > En la tabla ordendecompras tengo un campo llamado total que es
quien
> > > > contine
> > > > > el total de la suma de cada item con requerencia al campo


compraID
> > > > > lo que quiero hacer es un join para unir ambas tablas y hacer


una
> > sola,
> > > > pero
> > > > > cuando hago el Join el total se me retipe por cada Item de la
orden,
> > Lo
> > > > que
> > > > > quiero saber es como se implementa este tipo de base de datos ?
> Quiero
> > > > saber
> > > > > si es correcto lo que tengo y como puedo resolver el problema


que
> > tengo.
> > > > >
> > > > > Nota:
> > > > > Quiero saber como puedo unir ambas tabla.
> > > > >
> > > > > Gracias.
> > > > >
> > > > >
> > > > >
> > > > > Create table OrdenDeCompra
> > > > > (CompraID int identity(1,1)
> > > > > primary key clustered,
> > > > > OrdenNumero varchar (20)not null
> > > > > constraint U_OrdenNumero unique (OrdenNumero),
> > > > > suplidorID int not null,
> > > > > RequisicionID int not null,
> > > > > Ordencancelada varchar (15)null,
> > > > > Cargado varchar not null,
> > > > > fecha datetime not null,
> > > > > Empleado varchar (30) DEFAULT SUSER_Sname(),
> > > > > status varchar (200),
> > > > > Condicion bit default (1),
> > > > > Nota varchar (200),
> > > > > ParaUso varchar (30),
> > > > > Condiciones varchar (20),
> > > > > Solicitado varchar (30)not null,
> > > > > Total money,
> > > > > Constraint FK_SuplidorID_OrdenDeCompra foreign key (SuplidorID)
> > > > > references Suplidor (SuplidorID),
> > > > > Constraint FK_RequisicionesID_OrdenDeCompra foreign key
> > (RequisicionID)
> > > > > references RequisicionPorDepartamento (RequisicionID)on delete
> > cascade,
> > > > > )
> > > > >
> > > > > go
> > > > >
> > > > > Create table detalleDeCompras
> > > > > (detalleid int identity(1,1)
> > > > > Primary key,
> > > > > CompraID int,
> > > > > Articulo varchar (25)not null,
> > > > > Descripcion varchar (200) null,
> > > > > Cantidad Money not null,
> > > > > Unidad varchar (30) not null,
> > > > > PrecioUnitario Money not null,
> > > > > SubTotal as (cantidad * PrecioUnitario),
> > > > > constraint detalleDeCompras_OrdenDeCompra foreign key (CompraID)
> > > > > references OrdenDecompra (CompraID)on delete cascade)
> > > > >
> > > > > go
> > > > > SELECT dbo.OrdenDeCompra.OrdenNumero,
> > dbo.OrdenDeCompra.suplidorID,
> > > > > dbo.OrdenDeCompra.RequisicionID,


dbo.OrdenDeCompra.Ordencancelada,
> > > > > dbo.OrdenDeCompra.Cargado,
> > > dbo.OrdenDeCompra.fecha,
> > > > > dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
> > > > > dbo.OrdenDeCompra.Condicion,
> > > dbo.OrdenDeCompra.Nota,
> > > > > dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
> > > > > dbo.OrdenDeCompra.Solicitado,
> > > > > dbo.detalleDeCompras.Articulo, dbo.detalleDeCompras.Descripcion,
> > > > > dbo.detalleDeCompras.Cantidad,
> > > > > dbo.detalleDeCompras.Unidad,


dbo.detalleDeCompras.PrecioUnitario,
> > > > > dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
> > > > > FROM dbo.OrdenDeCompra INNER JOIN dbo.detalleDeCompras


ON
> > > > > dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
> > > > > WHERE (dbo.OrdenDeCompra.Condicion = 1)
> > > > >
> > > > > Go
> > > > > create trigger Insert_detalleDeCompras
> > > > > on detalleDeCompras
> > > > > for insert,update,delete
> > > > > as
> > > > > if @@rowcount = 0
> > > > > return
> > > > > update ordenDecompra
> > > > > set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
> > > > > from detalleDeCompras
> > > > > where detalleDeCompras.CompraID=ordendecompra.compraID)
> > > > > from detalleDeCompras inner Join ordendecompra on
> > > > > detalleDeCompras.compraid=ordendecompra.compraid
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#13 Julio
08/01/2004 - 16:29 | Informe spam
Ya pude comprobar donde esta el problema de usarlo como yo lo tengo, es lo
siguiente:
Cuando tengo varios detalles agregados y lo voy borrando uno por uno el me
va restando el total por cada articulo que borro, pero cuando llego al
ultimo me lo borra pero el total no se pone en cero ya que no existe la
relacion de ambos ID para el hacer la compracion.

Ya si que tengo el problema arriba.


"Julio" wrote in message
news:%
Tuve una curiosidad por los que me dice Miguel Egea, la cual me dice que


el
trigger esta mal implementado, pero me funciona a la perfeccion ya que


hace
el insert,delete,update bien. Lo que no se si esto en un futuro me podia
traer problema.

.Este es el codigo

create trigger Insert_detalleDeCompras

on detalleDeCompras

for insert,update,delete

as

if @@rowcount = 0

return

update ordenDecompra

set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)

from detalleDeCompras

where detalleDeCompras.CompraID=ordendecompra.compraID)

from detalleDeCompras inner Join ordendecompra on

detalleDeCompras.compraid=ordendecompra.compraid




"Norman A. Armas" wrote in message
news:
> Para eso que quieres hacer lo que te recomiendo es que pongas en la


tabla
de
> encabezado un campo calculado el cual apuntaria a una funcion que a su


vez
> seria la que calcularia el total de la tabla detalles.
> Particularmente no se que objetivo quieres lograr con esto pero eso creo
que
> seria la mejor solucion
>
> Saludos
>
>
> Norman
>
>
>
> "Julio" wrote in message
> news:
> > Lo probe pero sigue el problema, aun cuando borro todo los detalles el
> total
> > se mantiene en la otra tabla con la misma informacion, me doy cuenta


que
> el
> > insert se aplica bien pero el update no ni el delete
> >
> > "Maximiliano Damian Accotto"


<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > wrote in message news:
> > > que tal si probas esto:
> > >
> > >
> > > create trigger Insert_detalleDeCompras8
> > > on detalleDeCompras
> > > for insert,update,delete
> > > as
> > > if @@rowcount = 0
> > > return
> > > update ordenDecompra
> > > set ordenDecompra.total= ordenDecompra.total + (select
> > > sum(inserted.Subtotal)
> > > from inserted
> > > where inserted.CompraID=ordendecompra.compraID)
> > > from inserted inner Join ordendecompra on
> > > Inserted.compraid=ordendecompra.compraid
> > >
> > >
> > > pd: ahora yo te recomiendo lo que ha dicho Miguel, en lugar de un
> trigger
> > > usar una vista Idexada ;-)
> > >
> > > Salu2
> > > Maximiliano Damian Accotto
> > >
> > >
> > > "Julio" escribió en el mensaje
> > > news:
> > > > Estoy tratando de utilizar las tablas Virtuales de los trigger


pero
> esto
> > > no
> > > > me funciona, cuando instrodusco un nuevo registro en total me pode
el
> > > valor
> > > > que hay en ese nuevo registro pero no me suma los demas registro


que
> > > > pertenecen a esa orden.
> > > >
> > > > Este es el codigo.
> > > >
> > > > create trigger Insert_detalleDeCompras8
> > > > on detalleDeCompras
> > > > for insert,update,delete
> > > > as
> > > > if @@rowcount = 0
> > > > return
> > > > update ordenDecompra
> > > > set ordenDecompra.total=(select sum(inserted.Subtotal)
> > > > from inserted
> > > > where inserted.CompraID=ordendecompra.compraID)
> > > > from inserted inner Join ordendecompra on
> > > > Inserted.compraid=ordendecompra.compraid
> > > >
> > > >
> > > > "Miguel Egea" wrote in message
> > > > news:
> > > > > Veamos por partes
> > > > > lo primero que quieres hacer es un sumatorio
> > > > > en tu caso podría ser algo parecido a esto
> > > > >
> > > > > /* codigo sin probar */
> > > > > Select Compraid,sum(Subtotal) Total
> > > > > from OrdenDeCompra o inner join detalledecompras d
> > > > > on o.Compraid=d.compraid
> > > > > group by compraid
> > > > >
> > > > > El trigger que declaras en tu pie esta mal implementado,
> > > > > Los triggers tienen dos tablas virtuales que existen per-se que
son
> > > > inserted
> > > > > y deleted
> > > > > Busca en http://www.portalsql.com por tirggers y verás varios
> > ejemplos,
> > > > > simplemente amoldalo a tu necesidad.
> > > > >
> > > > > El otro día tuvimos una pequeña charla en este mismo grupo sobre
si
> > > > triggers
> > > > > o vistas indexadas, creo que sería enriquecedor paratí que lo
> leyeses.
> > > > >
> > > > >
> > > > > Saludos
> > > > > Miguel Egea
> > > > >
> > > > >
> > > > > "Julio" escribió en el mensaje
> > > > > news:
> > > > > > Hola grupo tengo el siguiente problema haber si me pueden dar
una
> > > mano.
> > > > > >
> > > > > > Tengo que crear uan base de datos para generar una orden de
compra
> > ya
> > > > que
> > > > > > esta se lleva en excel.
> > > > > >
> > > > > > Tengo creada una tabla llamada ordendecompra y una tabla


llamada
> > > > > > detalleDeCompras
> > > > > > en la tabla ordendecompra pongo los encabezado de la ordenes


de
> > > compras
> > > > y
> > > > > en
> > > > > > detalles tengo los item que se van agregando en la orden de
compra
> > > > > > En la tabla ordendecompras tengo un campo llamado total que es
> quien
> > > > > contine
> > > > > > el total de la suma de cada item con requerencia al campo
compraID
> > > > > > lo que quiero hacer es un join para unir ambas tablas y hacer
una
> > > sola,
> > > > > pero
> > > > > > cuando hago el Join el total se me retipe por cada Item de la
> orden,
> > > Lo
> > > > > que
> > > > > > quiero saber es como se implementa este tipo de base de datos


?
> > Quiero
> > > > > saber
> > > > > > si es correcto lo que tengo y como puedo resolver el problema
que
> > > tengo.
> > > > > >
> > > > > > Nota:
> > > > > > Quiero saber como puedo unir ambas tabla.
> > > > > >
> > > > > > Gracias.
> > > > > >
> > > > > >
> > > > > >
> > > > > > Create table OrdenDeCompra
> > > > > > (CompraID int identity(1,1)
> > > > > > primary key clustered,
> > > > > > OrdenNumero varchar (20)not null
> > > > > > constraint U_OrdenNumero unique (OrdenNumero),
> > > > > > suplidorID int not null,
> > > > > > RequisicionID int not null,
> > > > > > Ordencancelada varchar (15)null,
> > > > > > Cargado varchar not null,
> > > > > > fecha datetime not null,
> > > > > > Empleado varchar (30) DEFAULT SUSER_Sname(),
> > > > > > status varchar (200),
> > > > > > Condicion bit default (1),
> > > > > > Nota varchar (200),
> > > > > > ParaUso varchar (30),
> > > > > > Condiciones varchar (20),
> > > > > > Solicitado varchar (30)not null,
> > > > > > Total money,
> > > > > > Constraint FK_SuplidorID_OrdenDeCompra foreign key


(SuplidorID)
> > > > > > references Suplidor (SuplidorID),
> > > > > > Constraint FK_RequisicionesID_OrdenDeCompra foreign key
> > > (RequisicionID)
> > > > > > references RequisicionPorDepartamento (RequisicionID)on delete
> > > cascade,
> > > > > > )
> > > > > >
> > > > > > go
> > > > > >
> > > > > > Create table detalleDeCompras
> > > > > > (detalleid int identity(1,1)
> > > > > > Primary key,
> > > > > > CompraID int,
> > > > > > Articulo varchar (25)not null,
> > > > > > Descripcion varchar (200) null,
> > > > > > Cantidad Money not null,
> > > > > > Unidad varchar (30) not null,
> > > > > > PrecioUnitario Money not null,
> > > > > > SubTotal as (cantidad * PrecioUnitario),
> > > > > > constraint detalleDeCompras_OrdenDeCompra foreign key


(CompraID)
> > > > > > references OrdenDecompra (CompraID)on delete cascade)
> > > > > >
> > > > > > go
> > > > > > SELECT dbo.OrdenDeCompra.OrdenNumero,
> > > dbo.OrdenDeCompra.suplidorID,
> > > > > > dbo.OrdenDeCompra.RequisicionID,
dbo.OrdenDeCompra.Ordencancelada,
> > > > > > dbo.OrdenDeCompra.Cargado,
> > > > dbo.OrdenDeCompra.fecha,
> > > > > > dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
> > > > > > dbo.OrdenDeCompra.Condicion,
> > > > dbo.OrdenDeCompra.Nota,
> > > > > > dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
> > > > > > dbo.OrdenDeCompra.Solicitado,
> > > > > > dbo.detalleDeCompras.Articulo,


dbo.detalleDeCompras.Descripcion,
> > > > > > dbo.detalleDeCompras.Cantidad,
> > > > > > dbo.detalleDeCompras.Unidad,
dbo.detalleDeCompras.PrecioUnitario,
> > > > > > dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
> > > > > > FROM dbo.OrdenDeCompra INNER JOIN dbo.detalleDeCompras
ON
> > > > > > dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
> > > > > > WHERE (dbo.OrdenDeCompra.Condicion = 1)
> > > > > >
> > > > > > Go
> > > > > > create trigger Insert_detalleDeCompras
> > > > > > on detalleDeCompras
> > > > > > for insert,update,delete
> > > > > > as
> > > > > > if @@rowcount = 0
> > > > > > return
> > > > > > update ordenDecompra
> > > > > > set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
> > > > > > from detalleDeCompras
> > > > > > where detalleDeCompras.CompraID=ordendecompra.compraID)
> > > > > > from detalleDeCompras inner Join ordendecompra on
> > > > > > detalleDeCompras.compraid=ordendecompra.compraid
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#14 Miguel Egea
08/01/2004 - 22:57 | Informe spam
Julio, creo que lel problema es de concepto.
prueba esto


Create table OrdenDeCompra
(CompraID int identity(1,1)
primary key clustered,
Total money
)

go

Create table detalleDeCompras
(detalleid int identity(1,1)
Primary key,
CompraID int,
Cantidad Money not null,
PrecioUnitario Money not null,
SubTotal as (cantidad * PrecioUnitario),
constraint detalleDeCompras_OrdenDeCompra foreign key (CompraID)
references OrdenDecompra (CompraID)on delete cascade)

go
Create trigger trg_detalledecompras on DetalleDeCompras
for insert,update,delete
as
begin
update o
set Total=isnull(Total,0)+Subtotal
From
OrdenDeCompra o inner join (select Compraid,Sum(subtotal) Subtotal FRom
inserted group by CompraId) i on
o.Compraid=i.Compraid

update o
set Total=isnull(Total,0)-Subtotal
From
OrdenDeCompra o inner join (select Compraid,Sum(subtotal) Subtotal FRom
deleted group by CompraId) d on
o.Compraid=d.Compraid
end
go

insert into OrdenDeCompra (Total) values(0)
insert into OrdenDeCompra (Total) values(0)
insert into OrdenDeCompra (Total) values(0)
GO
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,10,15.3)
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,1,14.3)
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,6,1.3)
go
Delete from DetalleDeCompra
select * from ordenDecompra

Saludos
Miguel Egea
"Julio" escribió en el mensaje
news:%
Ya pude comprobar donde esta el problema de usarlo como yo lo tengo, es lo
siguiente:
Cuando tengo varios detalles agregados y lo voy borrando uno por uno el me
va restando el total por cada articulo que borro, pero cuando llego al
ultimo me lo borra pero el total no se pone en cero ya que no existe la
relacion de ambos ID para el hacer la compracion.

Ya si que tengo el problema arriba.


"Julio" wrote in message
news:%
> Tuve una curiosidad por los que me dice Miguel Egea, la cual me dice que
el
> trigger esta mal implementado, pero me funciona a la perfeccion ya que
hace
> el insert,delete,update bien. Lo que no se si esto en un futuro me podia
> traer problema.
>
> .Este es el codigo
>
> create trigger Insert_detalleDeCompras
>
> on detalleDeCompras
>
> for insert,update,delete
>
> as
>
> if @@rowcount = 0
>
> return
>
> update ordenDecompra
>
> set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
>
> from detalleDeCompras
>
> where detalleDeCompras.CompraID=ordendecompra.compraID)
>
> from detalleDeCompras inner Join ordendecompra on
>
> detalleDeCompras.compraid=ordendecompra.compraid
>
>
>
>
> "Norman A. Armas" wrote in message
> news:
> > Para eso que quieres hacer lo que te recomiendo es que pongas en la
tabla
> de
> > encabezado un campo calculado el cual apuntaria a una funcion que a su
vez
> > seria la que calcularia el total de la tabla detalles.
> > Particularmente no se que objetivo quieres lograr con esto pero eso


creo
> que
> > seria la mejor solucion
> >
> > Saludos
> >
> >
> > Norman
> >
> >
> >
> > "Julio" wrote in message
> > news:
> > > Lo probe pero sigue el problema, aun cuando borro todo los detalles


el
> > total
> > > se mantiene en la otra tabla con la misma informacion, me doy cuenta
que
> > el
> > > insert se aplica bien pero el update no ni el delete
> > >
> > > "Maximiliano Damian Accotto"
<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > wrote in message news:
> > > > que tal si probas esto:
> > > >
> > > >
> > > > create trigger Insert_detalleDeCompras8
> > > > on detalleDeCompras
> > > > for insert,update,delete
> > > > as
> > > > if @@rowcount = 0
> > > > return
> > > > update ordenDecompra
> > > > set ordenDecompra.total= ordenDecompra.total + (select
> > > > sum(inserted.Subtotal)
> > > > from inserted
> > > > where inserted.CompraID=ordendecompra.compraID)
> > > > from inserted inner Join ordendecompra on
> > > > Inserted.compraid=ordendecompra.compraid
> > > >
> > > >
> > > > pd: ahora yo te recomiendo lo que ha dicho Miguel, en lugar de un
> > trigger
> > > > usar una vista Idexada ;-)
> > > >
> > > > Salu2
> > > > Maximiliano Damian Accotto
> > > >
> > > >
> > > > "Julio" escribió en el mensaje
> > > > news:
> > > > > Estoy tratando de utilizar las tablas Virtuales de los trigger
pero
> > esto
> > > > no
> > > > > me funciona, cuando instrodusco un nuevo registro en total me


pode
> el
> > > > valor
> > > > > que hay en ese nuevo registro pero no me suma los demas registro
que
> > > > > pertenecen a esa orden.
> > > > >
> > > > > Este es el codigo.
> > > > >
> > > > > create trigger Insert_detalleDeCompras8
> > > > > on detalleDeCompras
> > > > > for insert,update,delete
> > > > > as
> > > > > if @@rowcount = 0
> > > > > return
> > > > > update ordenDecompra
> > > > > set ordenDecompra.total=(select sum(inserted.Subtotal)
> > > > > from inserted
> > > > > where inserted.CompraID=ordendecompra.compraID)
> > > > > from inserted inner Join ordendecompra on
> > > > > Inserted.compraid=ordendecompra.compraid
> > > > >
> > > > >
> > > > > "Miguel Egea" wrote in


message
> > > > > news:
> > > > > > Veamos por partes
> > > > > > lo primero que quieres hacer es un sumatorio
> > > > > > en tu caso podría ser algo parecido a esto
> > > > > >
> > > > > > /* codigo sin probar */
> > > > > > Select Compraid,sum(Subtotal) Total
> > > > > > from OrdenDeCompra o inner join detalledecompras d
> > > > > > on o.Compraid=d.compraid
> > > > > > group by compraid
> > > > > >
> > > > > > El trigger que declaras en tu pie esta mal implementado,
> > > > > > Los triggers tienen dos tablas virtuales que existen per-se


que
> son
> > > > > inserted
> > > > > > y deleted
> > > > > > Busca en http://www.portalsql.com por tirggers y verás varios
> > > ejemplos,
> > > > > > simplemente amoldalo a tu necesidad.
> > > > > >
> > > > > > El otro día tuvimos una pequeña charla en este mismo grupo


sobre
> si
> > > > > triggers
> > > > > > o vistas indexadas, creo que sería enriquecedor paratí que lo
> > leyeses.
> > > > > >
> > > > > >
> > > > > > Saludos
> > > > > > Miguel Egea
> > > > > >
> > > > > >
> > > > > > "Julio" escribió en el mensaje
> > > > > > news:
> > > > > > > Hola grupo tengo el siguiente problema haber si me pueden


dar
> una
> > > > mano.
> > > > > > >
> > > > > > > Tengo que crear uan base de datos para generar una orden de
> compra
> > > ya
> > > > > que
> > > > > > > esta se lleva en excel.
> > > > > > >
> > > > > > > Tengo creada una tabla llamada ordendecompra y una tabla
llamada
> > > > > > > detalleDeCompras
> > > > > > > en la tabla ordendecompra pongo los encabezado de la ordenes
de
> > > > compras
> > > > > y
> > > > > > en
> > > > > > > detalles tengo los item que se van agregando en la orden de
> compra
> > > > > > > En la tabla ordendecompras tengo un campo llamado total que


es
> > quien
> > > > > > contine
> > > > > > > el total de la suma de cada item con requerencia al campo
> compraID
> > > > > > > lo que quiero hacer es un join para unir ambas tablas y


hacer
> una
> > > > sola,
> > > > > > pero
> > > > > > > cuando hago el Join el total se me retipe por cada Item de


la
> > orden,
> > > > Lo
> > > > > > que
> > > > > > > quiero saber es como se implementa este tipo de base de


datos
?
> > > Quiero
> > > > > > saber
> > > > > > > si es correcto lo que tengo y como puedo resolver el


problema
> que
> > > > tengo.
> > > > > > >
> > > > > > > Nota:
> > > > > > > Quiero saber como puedo unir ambas tabla.
> > > > > > >
> > > > > > > Gracias.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Create table OrdenDeCompra
> > > > > > > (CompraID int identity(1,1)
> > > > > > > primary key clustered,
> > > > > > > OrdenNumero varchar (20)not null
> > > > > > > constraint U_OrdenNumero unique (OrdenNumero),
> > > > > > > suplidorID int not null,
> > > > > > > RequisicionID int not null,
> > > > > > > Ordencancelada varchar (15)null,
> > > > > > > Cargado varchar not null,
> > > > > > > fecha datetime not null,
> > > > > > > Empleado varchar (30) DEFAULT SUSER_Sname(),
> > > > > > > status varchar (200),
> > > > > > > Condicion bit default (1),
> > > > > > > Nota varchar (200),
> > > > > > > ParaUso varchar (30),
> > > > > > > Condiciones varchar (20),
> > > > > > > Solicitado varchar (30)not null,
> > > > > > > Total money,
> > > > > > > Constraint FK_SuplidorID_OrdenDeCompra foreign key
(SuplidorID)
> > > > > > > references Suplidor (SuplidorID),
> > > > > > > Constraint FK_RequisicionesID_OrdenDeCompra foreign key
> > > > (RequisicionID)
> > > > > > > references RequisicionPorDepartamento (RequisicionID)on


delete
> > > > cascade,
> > > > > > > )
> > > > > > >
> > > > > > > go
> > > > > > >
> > > > > > > Create table detalleDeCompras
> > > > > > > (detalleid int identity(1,1)
> > > > > > > Primary key,
> > > > > > > CompraID int,
> > > > > > > Articulo varchar (25)not null,
> > > > > > > Descripcion varchar (200) null,
> > > > > > > Cantidad Money not null,
> > > > > > > Unidad varchar (30) not null,
> > > > > > > PrecioUnitario Money not null,
> > > > > > > SubTotal as (cantidad * PrecioUnitario),
> > > > > > > constraint detalleDeCompras_OrdenDeCompra foreign key
(CompraID)
> > > > > > > references OrdenDecompra (CompraID)on delete cascade)
> > > > > > >
> > > > > > > go
> > > > > > > SELECT dbo.OrdenDeCompra.OrdenNumero,
> > > > dbo.OrdenDeCompra.suplidorID,
> > > > > > > dbo.OrdenDeCompra.RequisicionID,
> dbo.OrdenDeCompra.Ordencancelada,
> > > > > > > dbo.OrdenDeCompra.Cargado,
> > > > > dbo.OrdenDeCompra.fecha,
> > > > > > > dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
> > > > > > > dbo.OrdenDeCompra.Condicion,
> > > > > dbo.OrdenDeCompra.Nota,
> > > > > > > dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
> > > > > > > dbo.OrdenDeCompra.Solicitado,
> > > > > > > dbo.detalleDeCompras.Articulo,
dbo.detalleDeCompras.Descripcion,
> > > > > > > dbo.detalleDeCompras.Cantidad,
> > > > > > > dbo.detalleDeCompras.Unidad,
> dbo.detalleDeCompras.PrecioUnitario,
> > > > > > > dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
> > > > > > > FROM dbo.OrdenDeCompra INNER JOIN


dbo.detalleDeCompras
> ON
> > > > > > > dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
> > > > > > > WHERE (dbo.OrdenDeCompra.Condicion = 1)
> > > > > > >
> > > > > > > Go
> > > > > > > create trigger Insert_detalleDeCompras
> > > > > > > on detalleDeCompras
> > > > > > > for insert,update,delete
> > > > > > > as
> > > > > > > if @@rowcount = 0
> > > > > > > return
> > > > > > > update ordenDecompra
> > > > > > > set ordenDecompra.total=(select


sum(detalleDeCompras.Subtotal)
> > > > > > > from detalleDeCompras
> > > > > > > where detalleDeCompras.CompraID=ordendecompra.compraID)
> > > > > > > from detalleDeCompras inner Join ordendecompra on
> > > > > > > detalleDeCompras.compraid=ordendecompra.compraid
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#15 Julio
09/01/2004 - 14:23 | Informe spam
Gracias Miguel por este valioso codigo, creo que de este ejemplo
puedo sacar lo que quiero.

Basicamente lo que quiero es:

Hacer una orden de compras y quiero para esto crear tres tabla que creo que
es lo correcto

1ro una para poner el encabezado de la orden de compra como son:
Fecha
Numero de orden
Departamento

2do una para poner los detalles de la orden de compras como son:
Cantidad
unidad
descripcion
PrecioUnitario
SubTotal

3ro una para poner las suma de los detalles tales como:
Codigo
Total

Al final hacer una vista de esto.

No se si es la manera correcta de implementar esto.

Todas las sugerencias son validas.





"Miguel Egea" wrote in message
news:
Julio, creo que lel problema es de concepto.
prueba esto


Create table OrdenDeCompra
(CompraID int identity(1,1)
primary key clustered,
Total money
)

go

Create table detalleDeCompras
(detalleid int identity(1,1)
Primary key,
CompraID int,
Cantidad Money not null,
PrecioUnitario Money not null,
SubTotal as (cantidad * PrecioUnitario),
constraint detalleDeCompras_OrdenDeCompra foreign key (CompraID)
references OrdenDecompra (CompraID)on delete cascade)

go
Create trigger trg_detalledecompras on DetalleDeCompras
for insert,update,delete
as
begin
update o
set Total=isnull(Total,0)+Subtotal
From
OrdenDeCompra o inner join (select Compraid,Sum(subtotal) Subtotal


FRom
inserted group by CompraId) i on
o.Compraid=i.Compraid

update o
set Total=isnull(Total,0)-Subtotal
From
OrdenDeCompra o inner join (select Compraid,Sum(subtotal) Subtotal


FRom
deleted group by CompraId) d on
o.Compraid=d.Compraid
end
go

insert into OrdenDeCompra (Total) values(0)
insert into OrdenDeCompra (Total) values(0)
insert into OrdenDeCompra (Total) values(0)
GO
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,10,15.3)
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,1,14.3)
insert into DetalleDecompras (compraid,cantidad,precioUnitario) values(
1,6,1.3)
go
Delete from DetalleDeCompra
select * from ordenDecompra

Saludos
Miguel Egea
"Julio" escribió en el mensaje
news:%
> Ya pude comprobar donde esta el problema de usarlo como yo lo tengo, es


lo
> siguiente:
> Cuando tengo varios detalles agregados y lo voy borrando uno por uno el


me
> va restando el total por cada articulo que borro, pero cuando llego al
> ultimo me lo borra pero el total no se pone en cero ya que no existe la
> relacion de ambos ID para el hacer la compracion.
>
> Ya si que tengo el problema arriba.
>
>
> "Julio" wrote in message
> news:%
> > Tuve una curiosidad por los que me dice Miguel Egea, la cual me dice


que
> el
> > trigger esta mal implementado, pero me funciona a la perfeccion ya que
> hace
> > el insert,delete,update bien. Lo que no se si esto en un futuro me


podia
> > traer problema.
> >
> > .Este es el codigo
> >
> > create trigger Insert_detalleDeCompras
> >
> > on detalleDeCompras
> >
> > for insert,update,delete
> >
> > as
> >
> > if @@rowcount = 0
> >
> > return
> >
> > update ordenDecompra
> >
> > set ordenDecompra.total=(select sum(detalleDeCompras.Subtotal)
> >
> > from detalleDeCompras
> >
> > where detalleDeCompras.CompraID=ordendecompra.compraID)
> >
> > from detalleDeCompras inner Join ordendecompra on
> >
> > detalleDeCompras.compraid=ordendecompra.compraid
> >
> >
> >
> >
> > "Norman A. Armas" wrote in message
> > news:
> > > Para eso que quieres hacer lo que te recomiendo es que pongas en la
> tabla
> > de
> > > encabezado un campo calculado el cual apuntaria a una funcion que a


su
> vez
> > > seria la que calcularia el total de la tabla detalles.
> > > Particularmente no se que objetivo quieres lograr con esto pero eso
creo
> > que
> > > seria la mejor solucion
> > >
> > > Saludos
> > >
> > >
> > > Norman
> > >
> > >
> > >
> > > "Julio" wrote in message
> > > news:
> > > > Lo probe pero sigue el problema, aun cuando borro todo los


detalles
el
> > > total
> > > > se mantiene en la otra tabla con la misma informacion, me doy


cuenta
> que
> > > el
> > > > insert se aplica bien pero el update no ni el delete
> > > >
> > > > "Maximiliano Damian Accotto"
> <maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > > wrote in message news:
> > > > > que tal si probas esto:
> > > > >
> > > > >
> > > > > create trigger Insert_detalleDeCompras8
> > > > > on detalleDeCompras
> > > > > for insert,update,delete
> > > > > as
> > > > > if @@rowcount = 0
> > > > > return
> > > > > update ordenDecompra
> > > > > set ordenDecompra.total= ordenDecompra.total + (select
> > > > > sum(inserted.Subtotal)
> > > > > from inserted
> > > > > where inserted.CompraID=ordendecompra.compraID)
> > > > > from inserted inner Join ordendecompra on
> > > > > Inserted.compraid=ordendecompra.compraid
> > > > >
> > > > >
> > > > > pd: ahora yo te recomiendo lo que ha dicho Miguel, en lugar de


un
> > > trigger
> > > > > usar una vista Idexada ;-)
> > > > >
> > > > > Salu2
> > > > > Maximiliano Damian Accotto
> > > > >
> > > > >
> > > > > "Julio" escribió en el mensaje
> > > > > news:
> > > > > > Estoy tratando de utilizar las tablas Virtuales de los trigger
> pero
> > > esto
> > > > > no
> > > > > > me funciona, cuando instrodusco un nuevo registro en total me
pode
> > el
> > > > > valor
> > > > > > que hay en ese nuevo registro pero no me suma los demas


registro
> que
> > > > > > pertenecen a esa orden.
> > > > > >
> > > > > > Este es el codigo.
> > > > > >
> > > > > > create trigger Insert_detalleDeCompras8
> > > > > > on detalleDeCompras
> > > > > > for insert,update,delete
> > > > > > as
> > > > > > if @@rowcount = 0
> > > > > > return
> > > > > > update ordenDecompra
> > > > > > set ordenDecompra.total=(select sum(inserted.Subtotal)
> > > > > > from inserted
> > > > > > where inserted.CompraID=ordendecompra.compraID)
> > > > > > from inserted inner Join ordendecompra on
> > > > > > Inserted.compraid=ordendecompra.compraid
> > > > > >
> > > > > >
> > > > > > "Miguel Egea" wrote in
message
> > > > > > news:
> > > > > > > Veamos por partes
> > > > > > > lo primero que quieres hacer es un sumatorio
> > > > > > > en tu caso podría ser algo parecido a esto
> > > > > > >
> > > > > > > /* codigo sin probar */
> > > > > > > Select Compraid,sum(Subtotal) Total
> > > > > > > from OrdenDeCompra o inner join detalledecompras d
> > > > > > > on o.Compraid=d.compraid
> > > > > > > group by compraid
> > > > > > >
> > > > > > > El trigger que declaras en tu pie esta mal implementado,
> > > > > > > Los triggers tienen dos tablas virtuales que existen per-se
que
> > son
> > > > > > inserted
> > > > > > > y deleted
> > > > > > > Busca en http://www.portalsql.com por tirggers y verás


varios
> > > > ejemplos,
> > > > > > > simplemente amoldalo a tu necesidad.
> > > > > > >
> > > > > > > El otro día tuvimos una pequeña charla en este mismo grupo
sobre
> > si
> > > > > > triggers
> > > > > > > o vistas indexadas, creo que sería enriquecedor paratí que


lo
> > > leyeses.
> > > > > > >
> > > > > > >
> > > > > > > Saludos
> > > > > > > Miguel Egea
> > > > > > >
> > > > > > >
> > > > > > > "Julio" escribió en el mensaje
> > > > > > > news:
> > > > > > > > Hola grupo tengo el siguiente problema haber si me pueden
dar
> > una
> > > > > mano.
> > > > > > > >
> > > > > > > > Tengo que crear uan base de datos para generar una orden


de
> > compra
> > > > ya
> > > > > > que
> > > > > > > > esta se lleva en excel.
> > > > > > > >
> > > > > > > > Tengo creada una tabla llamada ordendecompra y una tabla
> llamada
> > > > > > > > detalleDeCompras
> > > > > > > > en la tabla ordendecompra pongo los encabezado de la


ordenes
> de
> > > > > compras
> > > > > > y
> > > > > > > en
> > > > > > > > detalles tengo los item que se van agregando en la orden


de
> > compra
> > > > > > > > En la tabla ordendecompras tengo un campo llamado total


que
es
> > > quien
> > > > > > > contine
> > > > > > > > el total de la suma de cada item con requerencia al campo
> > compraID
> > > > > > > > lo que quiero hacer es un join para unir ambas tablas y
hacer
> > una
> > > > > sola,
> > > > > > > pero
> > > > > > > > cuando hago el Join el total se me retipe por cada Item de
la
> > > orden,
> > > > > Lo
> > > > > > > que
> > > > > > > > quiero saber es como se implementa este tipo de base de
datos
> ?
> > > > Quiero
> > > > > > > saber
> > > > > > > > si es correcto lo que tengo y como puedo resolver el
problema
> > que
> > > > > tengo.
> > > > > > > >
> > > > > > > > Nota:
> > > > > > > > Quiero saber como puedo unir ambas tabla.
> > > > > > > >
> > > > > > > > Gracias.
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > Create table OrdenDeCompra
> > > > > > > > (CompraID int identity(1,1)
> > > > > > > > primary key clustered,
> > > > > > > > OrdenNumero varchar (20)not null
> > > > > > > > constraint U_OrdenNumero unique (OrdenNumero),
> > > > > > > > suplidorID int not null,
> > > > > > > > RequisicionID int not null,
> > > > > > > > Ordencancelada varchar (15)null,
> > > > > > > > Cargado varchar not null,
> > > > > > > > fecha datetime not null,
> > > > > > > > Empleado varchar (30) DEFAULT SUSER_Sname(),
> > > > > > > > status varchar (200),
> > > > > > > > Condicion bit default (1),
> > > > > > > > Nota varchar (200),
> > > > > > > > ParaUso varchar (30),
> > > > > > > > Condiciones varchar (20),
> > > > > > > > Solicitado varchar (30)not null,
> > > > > > > > Total money,
> > > > > > > > Constraint FK_SuplidorID_OrdenDeCompra foreign key
> (SuplidorID)
> > > > > > > > references Suplidor (SuplidorID),
> > > > > > > > Constraint FK_RequisicionesID_OrdenDeCompra foreign key
> > > > > (RequisicionID)
> > > > > > > > references RequisicionPorDepartamento (RequisicionID)on
delete
> > > > > cascade,
> > > > > > > > )
> > > > > > > >
> > > > > > > > go
> > > > > > > >
> > > > > > > > Create table detalleDeCompras
> > > > > > > > (detalleid int identity(1,1)
> > > > > > > > Primary key,
> > > > > > > > CompraID int,
> > > > > > > > Articulo varchar (25)not null,
> > > > > > > > Descripcion varchar (200) null,
> > > > > > > > Cantidad Money not null,
> > > > > > > > Unidad varchar (30) not null,
> > > > > > > > PrecioUnitario Money not null,
> > > > > > > > SubTotal as (cantidad * PrecioUnitario),
> > > > > > > > constraint detalleDeCompras_OrdenDeCompra foreign key
> (CompraID)
> > > > > > > > references OrdenDecompra (CompraID)on delete cascade)
> > > > > > > >
> > > > > > > > go
> > > > > > > > SELECT dbo.OrdenDeCompra.OrdenNumero,
> > > > > dbo.OrdenDeCompra.suplidorID,
> > > > > > > > dbo.OrdenDeCompra.RequisicionID,
> > dbo.OrdenDeCompra.Ordencancelada,
> > > > > > > > dbo.OrdenDeCompra.Cargado,
> > > > > > dbo.OrdenDeCompra.fecha,
> > > > > > > > dbo.OrdenDeCompra.Empleado, dbo.OrdenDeCompra.status,
> > > > > > > > dbo.OrdenDeCompra.Condicion,
> > > > > > dbo.OrdenDeCompra.Nota,
> > > > > > > > dbo.OrdenDeCompra.ParaUso, dbo.OrdenDeCompra.Condiciones,
> > > > > > > > dbo.OrdenDeCompra.Solicitado,
> > > > > > > > dbo.detalleDeCompras.Articulo,
> dbo.detalleDeCompras.Descripcion,
> > > > > > > > dbo.detalleDeCompras.Cantidad,
> > > > > > > > dbo.detalleDeCompras.Unidad,
> > dbo.detalleDeCompras.PrecioUnitario,
> > > > > > > > dbo.detalleDeCompras.SubTotal,dbo.OrdenDeCompra.Total
> > > > > > > > FROM dbo.OrdenDeCompra INNER JOIN
dbo.detalleDeCompras
> > ON
> > > > > > > > dbo.OrdenDeCompra.CompraID = dbo.detalleDeCompras.CompraID
> > > > > > > > WHERE (dbo.OrdenDeCompra.Condicion = 1)
> > > > > > > >
> > > > > > > > Go
> > > > > > > > create trigger Insert_detalleDeCompras
> > > > > > > > on detalleDeCompras
> > > > > > > > for insert,update,delete
> > > > > > > > as
> > > > > > > > if @@rowcount = 0
> > > > > > > > return
> > > > > > > > update ordenDecompra
> > > > > > > > set ordenDecompra.total=(select
sum(detalleDeCompras.Subtotal)
> > > > > > > > from detalleDeCompras
> > > > > > > > where detalleDeCompras.CompraID=ordendecompra.compraID)
> > > > > > > > from detalleDeCompras inner Join ordendecompra on
> > > > > > > > detalleDeCompras.compraid=ordendecompra.compraid
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida