Re:Ciclo en Procedure

12/04/2004 - 00:25 por Roberto Ballesteros | Informe spam
Gracias de antemano a todos por su colaboracion.

Mi pregunta va a lo siguiente:

Me piden un reporte de saldo de cuentas x cobrar por
fechas de la siguiente manera.

Reporte del 01-Ene-02 al 11-Mar-04

Yo tengo que sacar un saldo inicial de acuerdo a las
fechas del reporte y despues de eso vienen las facturas y
abonos,de ahi tengo que ir recorriendo el saldo hasta el
final y es lo que no se como hacer.

Cliente: Facturas: Cargos Abonos: Saldo Inicial:

Manuel Lopez Alvarado 10,000

11-01-02 Fac.10 1000 10,100
11-01-02 Fac.11 300 10,400
13-01-02 Abono 400 10,000

Y asi sucesivamente, la situacion es que hay miles de
registros de facturas y abonos por cada cliente y pense
que en haciendolo con un Procedure seria mas rapido que
hacerlo con un For desde VBA.

De que forma puedo hacerlo?

Saludos

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
12/04/2004 - 10:38 | Informe spam
No está muy clara tu pregunta, pero básicamente lo que tienes que hacer
es un GROUP BY de las facturas, junto con la función de agregado SUM para
calcular los costes de las facturas que estén dentro del rango de fechas
indicado y restarle lo obtenido de los abonos. Mira en los BOL la sintaxis
correcta y verás cómo se puede hacer.

Hacerlo desde la base de datos será más rápido siempre que lo hagas de
la forma correcta, esto es, tratando los registros como conjuntos (en este
caso GROUP BY y SUM) y no de forma individual (evitando el uso de cursores,
por ejemplo). Si intentas hacer de T-SQL un lenguaje tradicional (lo que se
entiende como tal), estás usándolo de forma inapropiada.


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Roberto Ballesteros" escribió en el
mensaje news:1b1eb01c42013$e8f6c390$
Gracias de antemano a todos por su colaboracion.

Mi pregunta va a lo siguiente:

Me piden un reporte de saldo de cuentas x cobrar por
fechas de la siguiente manera.

Reporte del 01-Ene-02 al 11-Mar-04

Yo tengo que sacar un saldo inicial de acuerdo a las
fechas del reporte y despues de eso vienen las facturas y
abonos,de ahi tengo que ir recorriendo el saldo hasta el
final y es lo que no se como hacer.

Cliente: Facturas: Cargos Abonos: Saldo Inicial:

Manuel Lopez Alvarado 10,000

11-01-02 Fac.10 1000 10,100
11-01-02 Fac.11 300 10,400
13-01-02 Abono 400 10,000

Y asi sucesivamente, la situacion es que hay miles de
registros de facturas y abonos por cada cliente y pense
que en haciendolo con un Procedure seria mas rapido que
hacerlo con un For desde VBA.

De que forma puedo hacerlo?

Saludos

Respuesta Responder a este mensaje
#2 Roberto Ballesteros
12/04/2004 - 17:56 | Informe spam
Que tal Carlos.. gracias por tu respuesta.

A lo que me refiero es precisamente a lo que tu me dices,
yo quiero ir recorriendo el saldo de facturas y abonos
pero no de forma individual, esto es por medio de un ciclo
FOR para ir calculando manualmente el saldo que va
quedando, mi pregunta es como puedo mediante el GROUP BY
ir sacando el saldo..
=Ej.
== esto lo que
== necesito hacer
== en un procedure
== como lo hago?
Cliente: Facturas: Cargos Abonos: Saldo Inicial:

Manuel Lopez Alvarado ,000

11-01-02 Fac.10 1000 ,100
11-01-02 Fac.11 300 ,400
13-01-02 Abono 400 ,000

Saludos
Respuesta Responder a este mensaje
#3 Miguel Egea
12/04/2004 - 19:14 | Informe spam
create table entradas
(id int identity(1,1) not null primary key,
fechaHora datetime default getdate(),
idcliente int not null,
cargos money,
abonos money)
go


insert into entradas (idcliente,cargos,abonos) values (1,100,0)
insert into entradas (idcliente,cargos,abonos) values (1,200,0)
insert into entradas (idcliente,cargos,abonos) values (1,0,150)
insert into entradas (idcliente,cargos,abonos) values (1,0,150)
insert into entradas (idcliente,cargos,abonos) values (1,1200,0)
go
select idCliente,cargos,abonos,
coalesce((select sum(coalesce(cargos,0))- sum(coalesce(abonos,0))
from entradas e2 where e2.idCliente=e.idcliente and e2.id<=e.id),0)
from entradas e
order by id
go
select idCliente,cargos,abonos,
coalesce((select sum(coalesce(cargos,0))- sum(coalesce(abonos,0))
from entradas e2 where e2.idCliente=e.idcliente and e2.id<=e.id),0)
from entradas e
where id>=3
order by id
go

Creo que puede ayudarte

Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
http://www.portalsql.com

(Quita el online si me tienes que mandar un correo)
"Roberto Ballesteros" escribió en el
mensaje news:1b5fa01c420a6$c74ae210$
Que tal Carlos.. gracias por tu respuesta.

A lo que me refiero es precisamente a lo que tu me dices,
yo quiero ir recorriendo el saldo de facturas y abonos
pero no de forma individual, esto es por medio de un ciclo
FOR para ir calculando manualmente el saldo que va
quedando, mi pregunta es como puedo mediante el GROUP BY
ir sacando el saldo..
=> Ej.
== esto lo que
== necesito hacer
== en un procedure
== como lo hago?
Cliente: Facturas: Cargos Abonos: Saldo Inicial:

Manuel Lopez Alvarado ,000

11-01-02 Fac.10 1000 ,100
11-01-02 Fac.11 300 ,400
13-01-02 Abono 400 ,000

Saludos
Respuesta Responder a este mensaje
#4 Roberto Ballesteros
13/04/2004 - 00:54 | Informe spam
Hola Miguel..!!

Gracias por tu colaboracion

Hay algo que no entiendo..

coalesce((select sum(coalesce(cargos,0))- sum(coalesce
(abonos,0))
= en esta linea que significa e2 despues del from
from entradas e2 where e2.idCliente=e.idcliente and
= e2.id<=e.id),0)
from entradas e
order by id
Respuesta Responder a este mensaje
#5 Miguel Egea
14/04/2004 - 11:14 | Informe spam
e2 es un alias a la tabla entradas, para distinguirla de e, la tabla de
entradas externa (bueno su alias) El coalesce simplemente es una vforma de
evitar los nulos, ya sabes null -0 =null


Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
http://www.portalsql.com

(Quita el online si me tienes que mandar un correo)
"Roberto Ballesteros" escribió en el
mensaje news:1b8ec01c420e1$24991880$
Hola Miguel..!!

Gracias por tu colaboracion

Hay algo que no entiendo..

coalesce((select sum(coalesce(cargos,0))- sum(coalesce
(abonos,0))
= en esta linea que significa e2 despues del from
from entradas e2 where e2.idCliente=e.idcliente and
=> e2.id<=e.id),0)
from entradas e
order by id


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