Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Query Anidado (https://www.clubdelphi.com/foros/showthread.php?t=37203)

Ricsato 06-11-2006 20:57:25

Query Anidado
 
Necesito que alguien me ayude a optener un query aninado, que no se como relacionarlo entre si, tengo 3 tablas PAGOS, DPAGOS y CLIENTES:

SELECT Cli_Nombre, pag_tipocredito, Pag_Total, SUM(Dpg_Abono) AS Total_Abonado FROM Dpagos DPG
LEFT JOIN Pagos Pag ON Pag.Pag_Folio = Dpg.Dpg_Folio AND
Pag.Pag_RelCobro = Dpg.Dpg_RelCobro
LEFT JOIN Clientes Cli ON Cli.Cli_Codigo = Pag.Pag_Empresa
WHERE Pag_estatus = 0
GROUP BY Cli_Nombre, pag_tipocredito, Pag_Total
ORDER BY Cli_Nombre

Lo cual me regresa los siguientes datos:
cli_nombre -- pag_tipocredito -- pag_total -- total_abonado
--------------------------------------------------------------------------
CALIBAJA ------- 1 ------ 950 ------ 79.17
CALIBAJA ------- 1 ------ 1,500 ------ 120.00
COMSA ------- 1 ------ 800 ------ 85.15
COMSA ------- 1 ------ 400 ------ 100.00
TIMSA ------- 1 ------ 1,000 ------ 150.00
TIMSA ------- 1 ------ 900 ------ 850.00
--------------------------------------------------------------------------

obteniendo estos datos del Query de arriba, necesito ahora con esta informacion anidar otro query para que me regrese solo la siguiente informacion, sumandome las columnas numericas:

cli_nombre --- pag_total --- total_abonado
-----------------------------------------------------------
CALIBAJA ---- 2450 ----- 199.17
COMSA ---- 1200 ----- 185.15
TIMSA -----1900 ----- 1000.00

Entiendo que la clausula inicial seria

Select Cli_Nombre, SUM(Pag_Total), SUM(Total_Abonado) FROM Dpagos
Where ( ...primer query... )

Aqui, es donde no se como hacer el segundo filtrado en (..primer query...), como puedo hacer anidado ambos querys y me de el resultado que espero?

Saludos desde Mexicali, B.C., Mexico

sinalocarlos 06-11-2006 21:32:40

Buen dia Ricsato

podrias probar con:

Código SQL [-]
Select Cli_Nombre,  SUM(Pag_Total), SUM(Total_Abonado) from
(
  SELECT Cli_Nombre, pag_tipocredito, Pag_Total, SUM(Dpg_Abono) AS Total_Abonado 
  FROM Dpagos DPG  LEFT JOIN Pagos Pag ON Pag.Pag_Folio = Dpg.Dpg_Folio AND
  Pag.Pag_RelCobro = Dpg.Dpg_RelCobro
  LEFT JOIN Clientes Cli ON Cli.Cli_Codigo = Pag.Pag_Empresa
  WHERE Pag_estatus = 0  GROUP BY Cli_Nombre, pag_tipocredito, Pag_Total
) t1
GROUP BY Cli_Nombre
ORDER BY Cli_Nombre

a mi me funciona, lo dejo a consideracion de los gurus del foro otro metodo mejor

Saludos desde Tijuana BC Mexico

PD.
yo uso SQL server 2000 no se si tu motor soporte lo anterior

Ricsato 06-11-2006 21:42:16

Marca Error
 
Hola amigo tijuanense, gracias por tu respuesta, pero fijate que añadir lo que me propones me marca el SQL Server 2000 el siguiente mensaje de error:

"An Order by clause is invalid in views, derivaded tables, and subqueries unless top is also specified"

sinalocarlos 06-11-2006 21:50:20

fijate que no le haya quedado un order by en el select que forma la tabla
si te sigue marcando lo mismo postea el query para ver que pudiese ser

Ricsato 06-11-2006 21:58:26

Gracias
 
Si tienes razon, era el ORDER BY, que estaba dentro de la clausula del parentesis, gracias!!!


La franja horaria es GMT +2. Ahora son las 16:54:52.

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