jueves, 6 de septiembre de 2007

Sigo con lo mismo.... Consultas SQL

Hace mucho que no comento nada, y ésta vez es para mostrar otra consulta que tuve que hacer....

Necesitaba consultar los cobros que se hicieron y como se hicieron de todas las ventas, quedando la consulta de la siguiente foroma:


SELECT GVA12.ESTADO, GVA12.FECHA_EMIS, GVA12.N_COMP, GVA12.T_COMP,GVA12.IMPORTE, RECIBOS.N_COMP, RECIBOS.MENOR_F_FAC, DETALLE17.DIAS_PROM_CH, DETALLE1.CAJA, DETALLE2.BONIFPUB, DETALLE3.1, DETALLE4.IMP_SELLOS, DETALLE5.VISA, DETALLE6.DTO_PRONTO_PAGO, DETALLE7.2, DETALLE8.CTA_MOV, DETALLE9.3, DETALLE10.SUSS_RET, DETALLE11.CREDIMAS, DETALLE12.IG_RET, DETALLE13.4, DETALLE14.5, DETALLE15.AMERICAN_EXPRESS, DETALLE16.TICKETS_CANASTA, DETALLE17.VALORES_DEPOSITAR, DETALLE18.6, DETALLE19.ELECTRON, DETALLE20.7, DETALLE21.8, DETALLE22.CH_3_RECH, DETALLE23.MASTERCARD, DETALLE24.9, DETALLE25.DOC_A_COB, DETALLE26.9, DETALLE27.DGR_RET_ACS_ECS, DETALLE28.CAJA2, DETALLE29.CANJES, DETALLE30.10, DETALLE31.IVA_RETFROM (SELECT * FROM GVA12 WHERE T_COMP='REC') AS GVA12LEFT JOIN ( SELECT GVA07.N_COMP, DATOSREC.* FROM GVA12, GVA07, (SELECT MIN(FECHA_EMIS) AS MENOR_F_FAC, F_COMP_CAN, N_COMP_CAN, T_COMP_CAN FROM GVA07, GVA12 WHERE GVA07.N_COMP=GVA12.N_COMP AND T_COMP_CAN='REC' GROUP BY F_COMP_CAN, N_COMP_CAN, T_COMP_CAN ) AS DATOSREC WHERE GVA07.N_COMP_CAN=DATOSREC.N_COMP_CAN AND MENOR_F_FAC=GVA12.FECHA_EMIS AND GVA12.N_COMP=GVA07.N_COMP ) AS RECIBOSON GVA12.N_COMP=RECIBOS.N_COMP_CAN AND GVA12.T_COMP='REC' AND GVA12.ESTADO<>'ANU'
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CAJA, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA=1 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE1
ON GVA12.N_COMP= DETALLE1.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS BONIFPUB, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA=50100 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE2
ON GVA12.N_COMP= DETALLE2.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 1, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 27 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE3
ON GVA12.N_COMP= DETALLE3.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS IMP_SELLOS, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 50503 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE4
ON GVA12.N_COMP= DETALLE4.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS VISA, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 700 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE5
ON GVA12.N_COMP= DETALLE5.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS DTO_PRONTO_PAGO, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 50104 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE6
ON GVA12.N_COMP= DETALLE6.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 2, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 22 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE7
ON GVA12.N_COMP= DETALLE7.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CTA_MOV, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 2306 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE8
ON GVA12.N_COMP= DETALLE8.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 3, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 28 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE9
ON GVA12.N_COMP= DETALLE9.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS SUSS_RET, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 3071 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE10
ON GVA12.N_COMP= DETALLE10.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CREDIMAS, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 712 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE11
ON GVA12.N_COMP= DETALLE11.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS IG_RET, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 3000 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE12
ON GVA12.N_COMP= DETALLE12.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 4, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 23 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE13
ON GVA12.N_COMP= DETALLE13.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 5, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 29 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE14
ON GVA12.N_COMP= DETALLE14.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS AMERICAN_EXPRESS, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 701 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE15
ON GVA12.N_COMP= DETALLE15.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS TICKETS_CANASTA, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 2 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE16
ON GVA12.N_COMP= DETALLE16.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA14.IMPORTE_CH) AS VALORES_DEPOSITAR, AVG(DIAS) AS DIAS_PROM_CH, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01, SBA14 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 601 AND SBA05.N_COMP=SBA14.N_COMP_REC GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE17
ON GVA12.N_COMP= DETALLE17.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 6, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 24 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE18
ON GVA12.N_COMP= DETALLE18.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS ELECTRON, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 707 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE19
ON GVA12.N_COMP= DETALLE19.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 7, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 30 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE20
ON GVA12.N_COMP= DETALLE20.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 8, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 25 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE21
ON GVA12.N_COMP= DETALLE21.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CH_3_RECH, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 20911 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE22
ON GVA12.N_COMP= DETALLE22.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS MASTERCARD, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 702 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE23
ON GVA12.N_COMP= DETALLE23.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 9, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 20 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE24
ON GVA12.N_COMP= DETALLE24.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS DOC_A_COB, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 602 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE25
ON GVA12.N_COMP= DETALLE25.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 9, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 26 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE26
ON GVA12.N_COMP= DETALLE26.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS DGR_RET_ACS_ECS, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 3021 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE27
ON GVA12.N_COMP= DETALLE27.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CAJA2, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 3 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE28
ON GVA12.N_COMP= DETALLE28.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS CANJES, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 10 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE29
ON GVA12.N_COMP= DETALLE29.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS 10, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 21 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE30
ON GVA12.N_COMP= DETALLE30.N_COMP
LEFT JOIN ( SELECT SBA05.N_COMP,SUM(SBA05.MONTO) AS IVA_RET, SBA01.COD_CTA, SBA01.DESCRIPCIO FROM SBA05, SBA01 WHERE COD_COMP='REC' AND SBA05.COD_CTA=SBA01.COD_CTA AND SBA05.D_H='D' AND SBA01.COD_CTA= 3051 GROUP BY N_COMP, SBA01.COD_CTA, DESCRIPCIO ) AS DETALLE31
ON GVA12.N_COMP= DETALLE31.N_COMP


Pongo la consulta con letra bastante para no ocupar tanto espacio, mi intención es solo mostrar el largo de la misma, hasta ahora es la consulta más complicada que me toco hacer, y como se puede ver, la más larga.

8 comentarios:

Anónimo dijo...

sos un desastre, donde estudiaste, dedicate a otra cosa, seguro sos de la catolica

Anónimo dijo...

uhmmm ,veo tu consulta y es un re-quilombo

fz dijo...

La verdad Peter, la consulta es un re-quilombo. Después de verla un poco más y conversando con un amigo, me di cuenta que se puede mejorar, optimizando alguans cosas, cuando tenga tiempo posteo la consulta que actualice.
La urgencia y falta de experiencia de usar left joins provocaron lo que ven. Sera un quilombo, pero me devuelve lo que buscaba.

Gonzalo dijo...

hey fede, ya te putearon (primer mensaje aquí) ¿que se siente no estar a la altura de los seres superiores? ah! ¿nada? lo sospechaba :P

fz dijo...

Si, primera puteada. Todavía no se si eliminar el comentario o no. Lo que si parece es que es de salta y va a la UNSa, por el comentario despectivo a la Catolica.

Gonzalo dijo...

naaa...guardalo para la posteridad (?)

Unknown dijo...

No le des pelota... ni siquiera puso su nombre. Es otro cobarde anónimo.

fz dijo...

Lo único que estoy haciendo ahora es moderando los comentarios. Para evitar algo pero