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

#6 Julio
08/01/2004 - 14:32 | Informe spam
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
#7 Maximiliano Damian Accotto
08/01/2004 - 14:41 | Informe spam
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
#8 Julio
08/01/2004 - 15:19 | Informe spam
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
#9 Maximiliano Damian Accotto
08/01/2004 - 15:28 | Informe spam
Estimado, es que un delete deberia restar, por eso te digo esto se puede
hacer con trigger pero te recomiendo que lo hagas con una vista, cual es el
problema de hacerlo con una vista?

Maximiliano Damian Accotto


"Julio" escribió en el mensaje
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
#10 Norman A. Armas
08/01/2004 - 15:35 | Informe spam
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