Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con esta consulta (https://www.clubdelphi.com/foros/showthread.php?t=67980)

jfbaez 18-05-2010 00:08:24

Ayuda con esta consulta
 
Saludos a todos, tengo una pequeña laguna en esta consulta. Tengo dos tablas una de Debitos y otra de Creditos, y quiero presentar los debitos por facturas por un cliente especifico, el asunto esta en que quiero restar los montos que coincidan con el codigo del cliente y el numero de Debito de las tablas pero que tambien me traiga los debitos que no tiene movimiento en la tabla Creditos, mi consulta es esta,

Código SQL [-]
'SELECT Debitos.Fecha, Debitos.Tipo_Doc, Debitos.Numero,'+
'(Debitos.Monto - RCreditos.Monto) AS MontoT FROM Debitos,'+
'(SELECT Num_Debito, SUM(Monto) AS Monto FROM Creditos Where codigo = '+Edit1.Text+' GROUP BY Num_Debito)'+
'AS RCreditos WHERE (Debitos.Numero = RCreditos.Num_Debito) AND'+
' ((Debitos.Monto - RCreditos.Monto) > 0)'+
'ORDER BY Debitos.Numero';



Gracias de antemano...

jfbaez 18-05-2010 14:31:22

Ayuda con esta consulta
 
Utilizo SQL Server 2000 y Delphi 7

Caro 18-05-2010 15:22:22

Hola jfbaez, para que te podamos ayudar mejor, sería bueno que pusieras tus tablas con los campos que entrarían en tu consulta y algunos datos que tienes y otra con el resultado que quieres obtener sobre esas tablas.

Saluditos

jfbaez 18-05-2010 15:48:48

Ayuda con esta consulta
 
Gracias Caro por tu respuesta y sugerencia, mis tablas son como sigue:

Debitos: Numero, Codigo, Fecha, Tipo_Doc, monto, status, concepto.

Creditos: Numero, Codigo, Num_Debito, Fecha, Tipo_Doc, monto, Status, Concepto.

La mision es traer los datos de la tabla Debitos que correspondan a un codigo espesifico, y los montos deben ser presentados con los creditos ya restados que estan en la tabla Creditos si tiene registro en la tabla, el asunto esta, que con la consulta de arriba solo me trae los registros que tengan movimiento en las dos tablas, y me gustaria traer los debitos que no tiene todavia credito aplicado.

Trate de ser un poco mas explicito en lo que deseo, y gracias por su atencion.

Caro 18-05-2010 17:11:09

Hola de nuevo jfbaez, ahora si te endiendo mejor, tienes que hacer una consulta con Left Join:

Código SQL [-]
Select D.Fecha, D.Tipo_Doc, D.Numero, D.Monto-C.Monto
From debitos D Left Join (Select Num_Debito, Sum(monto) as Monto 
                          From creditos Where Codigo='+Edit1.Text+' Group by Num_Debito) C
     On D.Numero=C.Num_Debito
Where D.Codigo='+Edit1.Text+' and D.Monto-C.Monto>0

Sin la última condición obtendras los debitos que no tienen ningún registro en la tabla creditos, pero si añades la última condición no tomará en cuenta esos registros porque te devolvera un valor nulo, para resolver eso puedes utilizar la función COALESCE y quedaría así:

Código SQL [-]
Select D.Fecha, D.Tipo_Doc, D.Numero, D.Monto-COALESCE(C.Monto, 0)
From Debitos D Left Join (Select Num_Debito, Sum(monto) as Monto
                          From Creditos 
                          Where Codigo='+Edit1.Text+' Group by Num_Debito) C
     On D.Numero=C.Num_Debito
Where D.Codigo='+Edit1.Text+' and D.Monto-COALESCE(C.Monto, 0)>0

Espero haberte entendido, si no es eso sigue aclarando.

Saluditos

jfbaez 18-05-2010 17:33:21

Wow!!! ese estilo de consulta me gusto bastante y funciona a la perfeccion. Muchas gracias por resolver este episodio y por el tiempo dedicado. DTB


La franja horaria es GMT +2. Ahora son las 06:25:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi