Ver Mensaje Individual
  #4  
Antiguo 15-04-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Reputación: 21
gluglu Va por buen camino
Hola Casimiro !

Estoy en ello ... ahora me pongo de nuevo y a ver si lo termino tal y como lo expuse anteriormente.

Aunque no cumpla ningún propósito, quiero mostrar de qué tipo de sentencia sin optimizar estamos hablando ....


Código SQL [-]
Insert Into BOOKINGS_PAXDETAIL_TEMP
 (RANDOMNO, RANDOMNO2, BOOKINGNO, INTERNALNO, ROOMINGLISTNO,
  BUILDINGNO, DATEARRIVAL, DATEDEPARTURE, DATECALC,
  CATEGORYNO, SUBCATEGORYNO, DATEFROM, DATETO, CLIENTNO,
  OBJECTINTNO, BOOKINGNAME, SURNAME1, SURNAME2, NAME,
  OBJECTNO, PAXTYPE1_QUANT, BOARDTYPE1, PAXTYPE2_QUANT,
  BOARDTYPE2, PAXTYPE3_QUANT, BOARDTYPE3, P_TYPE1_QUANT,
  B_TYPE1, P_TYPE2_QUANT, B_TYPE2, P_TYPE3_QUANT, B_TYPE3,
  OPERATORDEBIT, CREATETIMESTAMP, CREATEUSER, CREATEPOSITION,
  MODIFYTIMESTAMP, MODIFYUSER, MODIFYPOSITION)
 
Select -1, -2, RL.BOOKINGNO,
  IIF(BPD.ROOMINGLISTNO is null, -GEN_ID(TEMP_PAX_DETAIL,1), RL.ROOMINGLISTNO),
  RL.ROOMINGLISTNO, BK.BUILDINGNO, RL.DATEARRIVAL, RL.DATEDEPARTURE,
  null as DATECALC, RL.CATEGORYNO, RL.SUBCATEGORYNO, BO.DATEFROM,
  BO.DATETO, RL.CLIENTNO, BO.INTERNALNO,
  Coalesce(SURNAME1, '') ||
    IIF(SURNAME2 is null, '', ' ' || SURNAME2) ||
    IIF(NAME is null, '', ', ' || NAME),
  RL.SURNAME1, RL.SURNAME2, RL.NAME, BO.OBJECTNO,
 
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 1
       then RL.PAXQUANTITY
       else null
  end as PAXTYPE1_QUANT,
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 1
            and
            (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                    case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                    -1 end end
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
       then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO)
       else null
  end as BOARDTYPE1,
 
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 2
       then RL.PAXQUANTITY
       else null
  end as PAXTYPE2_QUANT,
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 2
            and
            (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                    case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                    -1 end end
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
       then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO)
       else null
  end as BOARDTYPE2,
 
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 3
       then RL.PAXQUANTITY
       else null
  end as PAXTYPE3_QUANT,
  case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) = 3
            and
            (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                    case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                    -1 end end
             from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
       then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
             where BPT.BOOKINGNO = RL.BOOKINGNO)
       else null
  end as BOARDTYPE3,
 
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 1
                 then RL.PAXQUANTITY
                 else null
            end
       else case when BPD.PAXTYPE1_QUANT is not null
                 then BPD.PAXTYPE1_QUANT
                 else null
            end
  end as P_TYPE1_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 1
                       and (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                                   case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                                   -1 end end
                            from BOOKINGS_PAXTYPE BPT
                            where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
                 then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO)
                 else null
            end
       else case when BPD.PAXTYPE1_QUANT is not null
                      and BPD.BOARDTYPE1 is not null
                 then BPD.BOARDTYPE1
                 else null
            end
  end as B_TYPE1,
 
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 2
                 then RL.PAXQUANTITY
                 else null
            end
       else case when BPD.PAXTYPE2_QUANT is not null
                 then BPD.PAXTYPE2_QUANT
                 else null
            end
  end as P_TYPE2_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 2
                       and (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                                   case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                                   -1 end end
                            from BOOKINGS_PAXTYPE BPT
                            where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
                 then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO)
                 else null
            end
       else case when BPD.PAXTYPE2_QUANT is not null
                      and BPD.BOARDTYPE2 is not null
                 then BPD.BOARDTYPE2
                 else null
            end
  end as B_TYPE2,
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 3
                 then RL.PAXQUANTITY
                 else null
            end
       else case when BPD.PAXTYPE3_QUANT is not null
                 then BPD.PAXTYPE3_QUANT
                 else null
            end
  end as P_TYPE3_QUANT,
  case when BPD.ROOMINGLISTNO is null
       then case when (Select Coalesce(Min(BPT.PAXTYPE), -1)
                       from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO) = 3
                       and (Select case when Count(Distinct BOARDTYPE) > 1 then -2 else
                                   case when Count(Distinct BOARDTYPE) = 1 then Min(BOARDTYPE) else
                                   -1 end end
                            from BOOKINGS_PAXTYPE BPT
                            where BPT.BOOKINGNO = RL.BOOKINGNO) > 0
                 then (Select Min(BOARDTYPE) from BOOKINGS_PAXTYPE BPT
                       where BPT.BOOKINGNO = RL.BOOKINGNO)
                 else null
            end
       else case when BPD.PAXTYPE3_QUANT is not null
                      and BPD.BOARDTYPE3 is not null
                 then BPD.BOARDTYPE3
                 else null
            end
  end as B_TYPE3,
 
  99 as OPERATORDEBIT,
  BPD.CREATETIMESTAMP, BPD.CREATEUSER, BPD.CREATEPOSITION,
  BPD.MODIFYTIMESTAMP, BPD.MODIFYUSER, BPD.MODIFYPOSITION
from BOOKINGS_ROOMINGLIST RL
left join BOOKINGS_OBJECTS BO
  on BO.ROOMINGLISTNO = RL.ROOMINGLISTNO
  and BO.DATEFROM <= '04-30-2011' and BO.DATETO >= '04-01-2011'
left join BOOKINGS_PAXDETAIL BPD
  on RL.ROOMINGLISTNO = BPD.ROOMINGLISTNO
left join BOOKINGS BK
  on RL.BOOKINGNO = BK.BOOKINGNO
where RL.BOOKINGNO = 101974




Como podrás observar en todo este 'peassso' de Sentencia, el caso que estoy exponiendo en este hilo aparece múltiples veces en la sentencia, y creo que no va a ser muy eficiente de esta manera. Por eso estoy intentando mejorarlo.
__________________
Piensa siempre en positivo !
Responder Con Cita