La razon basica es que los JOINS filtran FILAS. Los pivot en cambian trabajan de forma columnar y con agregaciones.
Hay unas mejoras en el SQL mas moderno que no veo en firebird que lo hacen un poco mas complicado, pero en fin la idea es:
1- Genera todas las filas requeridas LUEGO
2- Usa agregados y/o pivotea los datos
Dependiendo de la complejidad de esos agregados puede resultar mas simple crear una tabla temporal y hacer insert/updates.
Tambien da resultado partir la consulta en secciones. Primero haces los joins que cojen un conjunto de datos y luego los mezclas. Asi es MAS sencillo ver en que momento la consulta se "tuerce" y enfocarse en resolver eso.
P.D: Si la cosa no te da, podrias crear un script con una seccion limitada de datos pa checar...
|