ufff q complejo, no?

15/11/2003 - 20:12 por Tolo | Informe spam
hola,

vereis, tengo una tabla de Vencimientos en la cual tengo: Dia_pago e Importe
(entre otros, pero para simplificar...), y luego tengo una tabla de cobros
con los campos: dia_cobro e importe. Evidentemente, las dos tablas tienen un
campo fk_documento en referencia al documento al que hacen referencia.

Pues bién, de momento no tengo intención de incluir un campo Importe_pagado
en los vencimientos pues todo lo que pueda hacer a través de cálculos lo veo
mejor, pues así el dato siempre será el correcto.

Pues bién, me gustaría hacer una consulta que me diera el estado de un
vencimiento, esto es:

suponiendo un documento A, con unos vencimientos

Fecha Importe
01/11/03 200
15/11/03 200
30/11/03 200

Y un cobro (supongamos uno para simplificar el caso) de 375?, me gustaría
obtener una consulta con los datos siguientes:

fecha Importe Pagado
01/11/03 200 200
15/11/03 200 175
30/11/03 200 0


Sabeis como hacerlo con una consulta sql?????? a mi ahora mismo la verdad no
se me ocurre :(

Preguntas similare

Leer las respuestas

#1 Tolo
16/11/2003 - 17:23 | Informe spam
:(

" Tolo" escribió en el mensaje
news:
hola,

vereis, tengo una tabla de Vencimientos en la cual tengo: Dia_pago e


Importe
(entre otros, pero para simplificar...), y luego tengo una tabla de cobros
con los campos: dia_cobro e importe. Evidentemente, las dos tablas tienen


un
campo fk_documento en referencia al documento al que hacen referencia.

Pues bién, de momento no tengo intención de incluir un campo


Importe_pagado
en los vencimientos pues todo lo que pueda hacer a través de cálculos lo


veo
mejor, pues así el dato siempre será el correcto.

Pues bién, me gustaría hacer una consulta que me diera el estado de un
vencimiento, esto es:

suponiendo un documento A, con unos vencimientos

Fecha Importe
01/11/03 200
15/11/03 200
30/11/03 200

Y un cobro (supongamos uno para simplificar el caso) de 375?, me gustaría
obtener una consulta con los datos siguientes:

fecha Importe Pagado
01/11/03 200 200
15/11/03 200 175
30/11/03 200 0


Sabeis como hacerlo con una consulta sql?????? a mi ahora mismo la verdad


no
se me ocurre :(


Respuesta Responder a este mensaje
#2 dbuendiab
17/11/2003 - 00:00 | Informe spam
Pues bién, me gustaría hacer una consulta que me diera el estado de un
vencimiento, esto es:

suponiendo un documento A, con unos vencimientos

Fecha Importe
01/11/03 200
15/11/03 200
30/11/03 200

Y un cobro (supongamos uno para simplificar el caso) de 375?, me gustaría
obtener una consulta con los datos siguientes:

fecha Importe Pagado
01/11/03 200 200
15/11/03 200 175
30/11/03 200 0




Mira, Tolo, me lo he pasado de miedo con este crucigrama y - no se si
está bien o no - pero puesto que tengo el resultado que buscas...


CREATE TABLE V (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031101', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031130', 200 )

ambos

INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031103', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031113', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031128', 600 )


CREATE TABLE C (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT C ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 375 )

INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031104', 100 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031114', 800 )

pelo:

SELECT
a.iddoc, a.fecha, a.cantidad As CantV,

(
SELECT SUM( v.cantidad) FROM V
WHERE v.iddoc = a.iddoc AND c.fecha <= a.fecha ) AS CantVAcum,

fechas --
(
SELECT SUM( c.cantidad) FROM C
WHERE c.iddoc = a.iddoc ) AS CantCTot

INTO VC -- Al ser Access esta subconsulta la he tenido que crear como
tabla

FROM V AS a;

SELECT iddoc, fecha, CantV, CantVAcum, CantCTot,

CantVAcum-CantCTot AS P1,

(positivos)
CASE WHEN CantCTot > CantVAcum,
THEN CantVAcum,
ELSE CantVAcum - CantCTot END AS P2,

del
CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - ( CantVAcum - CantCTot ) AS P3,

CASE WHEN

CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

THEN 0

ELSE
CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

END AS DESIRED

FROM VC -- o bien desde la consulta que genera la tabla VC

A ver si te convence...

Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
#3 dbuendiab
17/11/2003 - 00:07 | Informe spam
Como no se si habrá quedado claro, te lo vuelvo a mandar sin
comentarios y sin tablas ni campos intermedios. Usa los comentarios
del otro post si necesitas aclaraciones

CREATE TABLE V (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031101', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031130', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031103', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031113', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031128', 600 )

CREATE TABLE C (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT C ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 375 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031104', 100 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031114', 800 )

SELECT
iddoc,
Fecha,
CantV As Importe,

CASE WHEN

CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

THEN 0

ELSE
CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

END AS Pagado

FROM (

SELECT
a.iddoc,
a.fecha,
a.cantidad As CantV,
(
SELECT SUM( v.cantidad)
FROM V
WHERE v.iddoc = a.iddoc AND c.fecha <= a.fecha
) AS CantVAcum,
(
SELECT SUM( c.cantidad)
FROM C
WHERE c.iddoc = a.iddoc
) AS CantCTot

FROM V AS a

) x
Respuesta Responder a este mensaje
#4 dbuendiab
17/11/2003 - 09:21 | Informe spam
Saludos, Tolo!

Como imaginaba, la traducción Access -> SQL a pelo no funciona
correctamente. Aquí te adjunto la solución comprobada sobre SQL:

CREATE TABLE V (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031101', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031130', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031103', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031113', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031128', 600 )

CREATE TABLE C (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT C ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 375 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031104', 100 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031114', 800 )

SELECT
iddoc,
Fecha,
CantV As Importe,

CASE WHEN

CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

THEN 0

ELSE
CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

END AS Pagado

FROM (

SELECT
a.iddoc,
a.fecha,
a.cantidad As CantV,
(
SELECT SUM( v.cantidad)
FROM V
WHERE v.iddoc = a.iddoc AND c.fecha <= a.fecha
) AS CantVAcum,
(
SELECT SUM( c.cantidad)
FROM C
WHERE c.iddoc = a.iddoc
) AS CantCTot

FROM V AS a

) x

Saludos y espero que te sirva

Diego Buendia
Barcelona Spain


" Tolo" wrote in message news:...
hola,

vereis, tengo una tabla de Vencimientos en la cual tengo: Dia_pago e Importe
(entre otros, pero para simplificar...), y luego tengo una tabla de cobros
con los campos: dia_cobro e importe. Evidentemente, las dos tablas tienen un
campo fk_documento en referencia al documento al que hacen referencia.

Pues bién, de momento no tengo intención de incluir un campo Importe_pagado
en los vencimientos pues todo lo que pueda hacer a través de cálculos lo veo
mejor, pues así el dato siempre será el correcto.

Pues bién, me gustaría hacer una consulta que me diera el estado de un
vencimiento, esto es:

suponiendo un documento A, con unos vencimientos

Fecha Importe
01/11/03 200
15/11/03 200
30/11/03 200

Y un cobro (supongamos uno para simplificar el caso) de 375?, me gustaría
obtener una consulta con los datos siguientes:

fecha Importe Pagado
01/11/03 200 200
15/11/03 200 175
30/11/03 200 0


Sabeis como hacerlo con una consulta sql?????? a mi ahora mismo la verdad no
se me ocurre :(
Respuesta Responder a este mensaje
#5 Tolo
19/11/2003 - 10:00 | Informe spam
Hola Diego, gracias. Te cuento como lo he resuelto al final q creo es lo
menos lioso.

Me he creado una función que dado un vencimiento me de el importe de los
vencimientos anteriores, de esta forma me puedo generar un select con un
resultado como:

Vto Importe_vto Importe_anterior

1 200 0
2 200 200
3 200 400

A partir de aquí es fácil calcular el importe a asociar a cada uno.

gracias

"Diego Buendia" escribió en el mensaje
news:
Saludos, Tolo!

Como imaginaba, la traducción Access -> SQL a pelo no funciona
correctamente. Aquí te adjunto la solución comprobada sobre SQL:

CREATE TABLE V (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031101', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 1, '20031130', 200 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031103', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031113', 600 )
INSERT V ( iddoc, fecha, cantidad ) VALUES ( 2, '20031128', 600 )

CREATE TABLE C (
iddoc INTEGER NOT NULL,
fecha DATETIME NOT NULL,
cantidad INTEGER NOT NULL )

INSERT C ( iddoc, fecha, cantidad ) VALUES ( 1, '20031115', 375 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031104', 100 )
INSERT C ( iddoc, fecha, cantidad ) VALUES ( 2, '20031114', 800 )

SELECT
iddoc,
Fecha,
CantV As Importe,

CASE WHEN

CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

THEN 0

ELSE
CASE WHEN CantCTot > CantVAcum
THEN CantV
ELSE CantV - (CantVAcum-CantCTot ) ) < 0 END

END AS Pagado

FROM (

SELECT
a.iddoc,
a.fecha,
a.cantidad As CantV,
(
SELECT SUM( v.cantidad)
FROM V
WHERE v.iddoc = a.iddoc AND c.fecha <= a.fecha
) AS CantVAcum,
(
SELECT SUM( c.cantidad)
FROM C
WHERE c.iddoc = a.iddoc
) AS CantCTot

FROM V AS a

) x

Saludos y espero que te sirva

Diego Buendia
Barcelona Spain


" Tolo" wrote in message


news:...
> hola,
>
> vereis, tengo una tabla de Vencimientos en la cual tengo: Dia_pago e


Importe
> (entre otros, pero para simplificar...), y luego tengo una tabla de


cobros
> con los campos: dia_cobro e importe. Evidentemente, las dos tablas


tienen un
> campo fk_documento en referencia al documento al que hacen referencia.
>
> Pues bién, de momento no tengo intención de incluir un campo


Importe_pagado
> en los vencimientos pues todo lo que pueda hacer a través de cálculos lo


veo
> mejor, pues así el dato siempre será el correcto.
>
> Pues bién, me gustaría hacer una consulta que me diera el estado de un
> vencimiento, esto es:
>
> suponiendo un documento A, con unos vencimientos
>
> Fecha Importe
> 01/11/03 200
> 15/11/03 200
> 30/11/03 200
>
> Y un cobro (supongamos uno para simplificar el caso) de 375?, me


gustaría
> obtener una consulta con los datos siguientes:
>
> fecha Importe Pagado
> 01/11/03 200 200
> 15/11/03 200 175
> 30/11/03 200 0
>
>
> Sabeis como hacerlo con una consulta sql?????? a mi ahora mismo la


verdad no
> se me ocurre :(
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida