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

#16 Miguel Egea
09/01/2004 - 22:49 | Informe spam
no se cuales son los requisitos de tu sistema, haz que cumpla 3ª forma
normal y después piensa en desnormalizaciones, aunque sea en periodo de
diseño...

Saludos
Miguel Egea
"Julio" escribió en el mensaje
news:
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
#17 julio
11/01/2004 - 00:28 | Informe spam
Gracias Miguel por tu apollo a mi requerimientos, pude encontral parte de
los que necesitaba en Portal SQl con el ejemplo de un trigger que hay
publicado bajo el titulo de 'como Crear trigger con SQL-Server







"Miguel Egea" wrote in message
news:
no se cuales son los requisitos de tu sistema, haz que cumpla 3ª forma
normal y después piensa en desnormalizaciones, aunque sea en periodo de
diseño...

Saludos
Miguel Egea
"Julio" escribió en el mensaje
news:
> 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
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida