Ver Mensaje Individual
  #4  
Antiguo 25-05-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.757
Reputación: 21
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Bien, ahora solo te queda responder las otras dos cunsultas que te he hecho:

- Qué indices PKs y FKs tienen estas tablas?
Puede ser que no tengas indices correctos para cuen01 o fact01
- Qué es eso de la comparación en el From?

Prueba este select, a ver cómo te va:

Código SQL [-]
SELECT DISTINCT
inve01.clv_art, inve01.descr, inve01.lin_prod,
fa0ty1.tip_doc, fa0ty1.cve_doc, fa0ty1.cant,
fa0ty1.tip_sig, fa0ty1.doc_sig, fa0ty1.tip_ant,
fa0ty1.doc_ant,  fact01.fecha_doc, fact01.status, 
((fact01.can_tot-fact01.des_tot)+fact01.imp_tot4) as totfac,
clie01.cclie, clie01.nombre, cuen01.no_factura, 
cuen01.tipo_mov, cuen01.importe, cuen01.docto, 
conc01.num_cpto, conc01.tipo
FROM
conc01 

join cuen01 
on conc01.num_cpto=cuen01.tipo_mov

join fact01
ON cuen01.no_factura=fact01.cve_doc OR 
   TRIM(cuen01.docto)=TRIM(fact01.cve_doc)

join clie01
ON clie01.cclie=fact01.cve_clpv

join fa0ty1
ON fa0ty1.cve_doc=fact01.cve_doc AND 
   fa0ty1.tip_doc=fact01.tip_doc

join inve01
ON fa0ty1.cve_art=inve01.clv_art

WHERE
inve01.clv_art Between  '1000' AND  '9000' AND
clie01.cclie  Between  '1' and  '5000' AND
fact01.fecha_doc Between '01/01/2007'and '12/31/2007'
AND inve01.lin_prod LIKE '%'
AND fa0ty1.tip_doc <> 'P' and fa0ty1.tip_doc <> 'C'
AND fa0ty1.tip_doc <> 'R' and fact01.status <> 'C'
ORDER BY inve01.clv_art, clie01.cclie, fact01.fecha_doc, fa0ty1.tip_doc
que debería ser igual a tu select
Código SQL [-]
SELECT DISTINCT
inve01.clv_art, inve01.descr, inve01.lin_prod,
fa0ty1.tip_doc, fa0ty1.cve_doc, fa0ty1.cant,
fa0ty1.tip_sig, fa0ty1.doc_sig, fa0ty1.tip_ant,
fa0ty1.doc_ant,  fact01.fecha_doc, fact01.status, 
((fact01.can_tot-fact01.des_tot)+fact01.imp_tot4) as totfac,
clie01.cclie, clie01.nombre, cuen01.no_factura, 
cuen01.tipo_mov, cuen01.importe, cuen01.docto, 
conc01.num_cpto, conc01.tipo
FROM
conc01 INNER JOIN(cuen01 INNER JOIN(clie01 INNER JOIN (fact01 INNER JOIN (fa0ty1 INNER JOIN inve01 
                                                                                 ON fa0ty1.cve_art=inve01.clv_art)
                                                              ON fa0ty1.cve_doc=fact01.cve_doc AND 
                                                                 fa0ty1.tip_doc=fact01.tip_doc)
                                           ON clie01.cclie=fact01.cve_clpv) 
                                           ON cuen01.no_factura=fact01.cve_doc OR 
                                              TRIM(cuen01.docto)=TRIM(fact01.cve_doc))
       ON conc01.num_cpto=cuen01.tipo_mov
WHERE
inve01.clv_art Between  '1000' AND  '9000' AND
clie01.cclie  Between  '1' and  '5000' AND
fact01.fecha_doc Between '01/01/2007'and '12/31/2007'
AND inve01.lin_prod LIKE '%'
AND fa0ty1.tip_doc <> 'P' and fa0ty1.tip_doc <> 'C'
AND fa0ty1.tip_doc <> 'R' and fact01.status <> 'C'
ORDER BY inve01.clv_art, clie01.cclie, fact01.fecha_doc, fa0ty1.tip_doc

- Tampoco veo como unes cuen01 con clie01. Esto puede hacer que hagas más lecturas de las necesarias...
- Prueba a usar RTRIM (). Esta función quita los espacios de la derecha y quizás sea mejor para hacer comparaciones. (podrá utilizar índices sobre los campos)
- Si estas cosas no funcionan, prueba a crear campos nuevos trim_docto y trim_cve_doc calculándolos en un trigger.
Responder Con Cita