jueves, 8 de marzo de 2007

Un poco de SQL

Nunca pensé que se podría llegar a complicar tanto una consulta SQL :P, todo empezó con un simple pedido de la gerente de mi sección que fue solucionado con una consulta de un renglon. Pero fue pidiendo más y más información hasta que llego a ser algo parecido a esto.

SELECT COBRANZAS.COD_VENDED, COBRANZAS.NOMBRE_VEN, COBRANZAS.DESCRIP, COBRANZAS.RAZON_SOCI, COBRANZAS.N_COMP_CAN, COBRANZAS.F_COMP_CAN, COBRANZAS.N_COMP, COBRANZAS.FECHA_EMIS, COBRANZAS.IMPORT_CAN, COBRANZAS.IMPORTE_VT, N_CHEQUE, IMPORTE_CH, FECHA_CHEQ, DIAS, SUMA_OTROS_VALORESFROM [SELECT COBRANZAS.COD_VENDED, COBRANZAS.NOMBRE_VEN, COBRANZAS.DESCRIP, COBRANZAS.RAZON_SOCI, COBRANZAS.N_COMP_CAN, COBRANZAS.F_COMP_CAN, COBRANZAS.N_COMP, COBRANZAS.FECHA_EMIS, COBRANZAS.IMPORT_CAN, COBRANZAS.IMPORTE_VT, N_CHEQUE, IMPORTE_CH, FECHA_CHEQ, DIAS FROM (SELECT RecNoAnu.COD_VENDED, gva23.NOMBRE_VEN, gva14fld.DESCRIP, gva14.RAZON_SOCI, gva07.N_COMP_CAN, gva07.F_COMP_CAN, gva07.N_COMP, FacNoAnu.FECHA_EMIS, gva07.IMPORT_CAN, gva07.IMPORTE_VT FROM gva23, gva07,(SELECT * FROM gva12 WHERE gva12.ESTADO<>'ANU' and T_COMP='FAC') AS FacNoAnu, (SELECT * FROM gva12 WHERE ESTADO<>'ANU' and T_COMP='REC') AS RecNoAnu, gva14, gva14fld, gva14itc WHERE gva07.T_COMP_CAN='REC' And gva07.F_COMP_CAN>=desde And gva07.F_COMP_CAN<=hasta And gva07.T_COMP_CAN='REC' And gva23.COD_VENDED=RecNoAnu.COD_VENDED And FacNoAnu.N_COMP=gva07.N_COMP And RecNoAnu.N_COMP=gva07.N_COMP_CAN And gva14.COD_CLIENT=FacNoAnu.COD_CLIENT and facNoAnu.COD_CLIENT=gva14itc.CODE and gva14itc.IDFOLDER=gva14fld.IDFOLDER) AS COBRANZAS
LEFT JOIN (SELECT * FROM SBA14 WHERE ESTADO<>'R' AND FECHA_REC>=desde And FECHA_REC<=hasta) AS CHEQUES ON COBRANZAS.N_COMP_CAN=CHEQUES.N_COMP_REC]. AS REC_CH LEFT JOIN [SELECT N_COMP, SUM(CANT_MONE) AS SUMA_OTROS_VALORES FROM SBA05 WHERE COD_CTA<>601 AND D_H='D' AND COD_COMP='REC' GROUP BY N_COMP]. AS SBA05 ON REC_CH.N_COMP_CAN=SBA05.N_COMP;


No se si es la forma más optima de hacerlo o no, pero es la que encontré para mostrarles todos los datos que necesita :P

Un dato llamativo es que toda esta consulta con tablas que tienen aporx 200 mil registros las estoy haciendo con ACCESS!!! si ya se, estoy loco, pero no pude importar las tablas que se encuentran en CodeBase a otro motor para hacer las consultas. Es una pelea que recién está empezando

to be continue......

P.D: Todos los retos son buenos....

4 comentarios:

Anónimo dijo...

Creo que podrias impementar SQLLITE como un motor auxiliar..
saludos..
gerardo

Unknown dijo...

hmm... no. sqllite está bien para cosas chicas. Pero para cosas medianas (con vistas a seguir creciendo) deberías ir pensando en algun motor de verdad y alguna forma de migrar todos los datos (en el ex-laboratorio del pueblo hay muchas chicas cargando datos por si no encontrás una automática :P ).

Ahora bien... ¿que coños se supone que quería saber? supongo que esa consulta fue dedicada a todos esos zarpados irrespetuosos que dicen que solo jugás al yetisports en el trabajo

fz dijo...

Vamos a ver si puedo explicar lo que queria saber......

Todos los recibos imputados a todas las facturas y a cuales, viendo de quien es la factura y quien fue el que realizo la cobranza, la fecha del recibo, la fecha de la factura, el importe de la factura el importe cancelado por el recibo, y la como se compone el recibo, si tienen cheques de que fecha es que importe tiene y a cuanto días es, además saber cuanto (si es que tiene) el monto de los otros valores, por ejemplo efectivo....

uf! Creo que es todo lo que necesito saber....todo esto en aproximadamente 7 tablas

y para los que dicen que únicamente juego al Yetisports... les digo que..... todos nos aburrimos de los juegos!!!!

Unknown dijo...

Eso de que todos los retos son buenos tiene algo que ver con que tu señora te rete tan seguido?
Tendría que empezar a comportarte como una persona adultera... digo, ADULTA!!!!!