Forums Últimos mensajes - Powered by IBM
 

[OT] Duda sobre SQL

27/11/2006 - 13:33 por meular | Informe spam
Buenos días,

Tengo un duda que me trae de cabeza y os la expongo a ver si alguien me
puede aportar un poco luz.

Tengo dos tablas, una de pagos y otra con el desglose de los mismos. En
resumen la estructura es esta:

PAGO
idpago, totalpago

DETALLE_PAGO
idlineapago, idpago, subtotalpago

Lo que quiero comprobar es que los "totalpago" coincidan con la suma de su
detalle. Si no coinciden quiero que me devuelva su "id". Es decir,

PAGO
==idpago: 1
totalpago: 200
idpago 2
totalapago: 100

DETALLE_PAGO
==idlineapago: 1
idpago: 1
subtotal: 100
idlineapago: 3
idpago: 2
subtotal: 100

idlineapago: 3
idpago: 2
subtotal: 50

En este caso quiero conseguir el registro "2".

¿Hay alguna forma de realizar esta verificación con una única SQL? Me
imagino que sí pero no he conseguido quitarla. La única forma forma soy
capaz de conseguirlo es mediante un procedimiento que haga dos consultas.
Una que coja un idpago y otra que consulte su detalle y que sume los
subtotales. Pero la verdad es que tengo "la espinita" clavada y me gustaría
saber si se puede hacer de otra forma.


Espero haberme explicado correctamente.

Gracias y un saludo.

meular
 

Leer las respuestas

#1 jcac
27/11/2006 - 14:01 | Informe spam
Aqui puedes probar estos resultado y ver su comportamiento.

Create Table #Tmp (idpago int, idtotal int)
Insert into #tmp values (1, 200)
Insert into #tmp values (2, 100)
Create Table #Tmp1 (idlineapago int, idpago int, subtotalpago int)
Insert into #Tmp1 values (1, 1, 100)
Insert into #Tmp1 values (2, 2, 100)
Insert into #Tmp1 values (3, 2, 50)
go

Select t1.idpago, t1.idtotal, sum(t2.subtotalpago) as subtotalpago
From #tmp t1 inner join #tmp1 t2 on t1.idpago=t2.idpago
Group by t1.idpago, t1.idtotal
go

Select t1.idpago, t1.idtotal - sum(t2.subtotalpago) as diferencia
From #tmp t1 inner join #tmp1 t2 on t1.idpago=t2.idpago
Group by t1.idpago, t1.idtotal
Order by t1.idpago
go

Insert into #Tmp1 values (4, 1, 100)
Select t1.idpago, t1.idtotal - sum(t2.subtotalpago) as diferencia
From #tmp t1 inner join #tmp1 t2 on t1.idpago=t2.idpago
Group by t1.idpago, t1.idtotal
Having t1.idtotal - sum(t2.subtotalpago) <> 0
Order by t1.idpago
go

Saludos y suerte


"meular" escribió en el mensaje
news:
Buenos días,

Tengo un duda que me trae de cabeza y os la expongo a ver si alguien me
puede aportar un poco luz.

Tengo dos tablas, una de pagos y otra con el desglose de los mismos. En
resumen la estructura es esta:

PAGO
idpago, totalpago

DETALLE_PAGO
idlineapago, idpago, subtotalpago

Lo que quiero comprobar es que los "totalpago" coincidan con la suma de su
detalle. Si no coinciden quiero que me devuelva su "id". Es decir,

PAGO
==> idpago: 1
totalpago: 200
idpago 2
totalapago: 100

DETALLE_PAGO
==> idlineapago: 1
idpago: 1
subtotal: 100
idlineapago: 3
idpago: 2
subtotal: 100

idlineapago: 3
idpago: 2
subtotal: 50

En este caso quiero conseguir el registro "2".

¿Hay alguna forma de realizar esta verificación con una única SQL? Me
imagino que sí pero no he conseguido quitarla. La única forma forma soy
capaz de conseguirlo es mediante un procedimiento que haga dos consultas.
Una que coja un idpago y otra que consulte su detalle y que sume los
subtotales. Pero la verdad es que tengo "la espinita" clavada y me
gustaría saber si se puede hacer de otra forma.


Espero haberme explicado correctamente.

Gracias y un saludo.

meular



Preguntas similares