Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/08/2009, 07:17
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años, 3 meses
Puntos: 38
Respuesta: Seleccionar una columna, conseguir 4

Una alternativa seria utilizar subquerys con left join...con los indices correctos deberia operar relativamente bien..

aunque tambien le podemos agregar una tabla temporal para seleccionar la info que en realidad se va a procesar y no estar aplicando los filtros en cada subquery, porque como es una tabla de Log debe tener muchos registros...

Código:
SELECT  INV.INVOICE-NR ,
        DEL.[DATE] AS [DATE_DELETION] ,
        CAN.[DATE] AS [DATE_CANCELLATION] ,
        PAY.[DATE] AS [DATE_PAYMENT] ,
FROM    (
            SELECT   INVOICE-NR
            FROM     PROCESS_LOG
            WHERE    [MICONDITIONS]
            GROUP BY INVOICE-NR 
        ) INV
LEFT JOIN (
            SELECT   INVOICE-NR, [DATE]
            FROM     PROCESS_LOG
            WHERE    [MICONDITIONS] AND
                     ID_COMPANY_PROCESS = 1 
        ) DEL
ON      INV.INVOICE-NR = DEL.INVOICE-NR 
LEFT JOIN (
            SELECT   INVOICE-NR, [DATE]
            FROM     PROCESS_LOG
            WHERE    [MICONDITIONS] AND
                     ID_COMPANY_PROCESS = 2
        ) CAN
ON      INV.INVOICE-NR = CAN.INVOICE-NR 
LEFT JOIN (
            SELECT   INVOICE-NR, [DATE]
            FROM     PROCESS_LOG
            WHERE    [MICONDITIONS] AND
                     ID_COMPANY_PROCESS = 3
        ) PAY
ON      INV.INVOICE-NR = PAY.INVOICE-NR


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.