Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Sacar habitaciones libres por dia - Problema consulta SQL- (https://www.clubdelphi.com/foros/showthread.php?t=24755)

VRO 01-09-2005 11:12:22

Sacar habitaciones libres por dia - Problema consulta SQL-
 
Hola, me reincorporo al trabajo despues de las vacaciones
y no se será el sindrome post-vacacional ó que , que se me
ha atragantado una consulta.

Vereis estoy habciendo la gestión de un hotel y quiero hallar
las habitaciones libres por día y tipo de habitación para colocar
el resultado en el planning de ocupacion del hotel.

Para ello utilizo un procedimiento almacenado, ya que al ser
una consulta grande me parece mucho mas rapido, al hacer
la consulta directamente en Interbase 5 , tambien utilizo Delphi 6.
Para hallar las habitaciones libres utilizo 3 tablas,
1.- La Tabla habitacion que es donde guardo todas las habitaciones existentes en el hotel.
2.- La Tabla reserva, que es donde registro todas las reservas hechas por un cliente y que habitacion/es ha reservado.
3.- La Tabla estancia, que es donde guardo todas las estancias de los clientes, es decir, si el cliente ya está en el hotel la reserva pasa ha estancia.

Por lo tanto mi procedimiento almacenado queda de la siguiente forma:

Código:


SET TERM!!;
CREATE PROCEDURE LIBRES_TIPO (FI DATE, FF DATE)
 RETURNS(NUM INTEGER,TIPO VARCHAR(10))
AS
BEGIN

      FOR SELECT COUNT(DISTINCT(COD_HAB)),TIPO
      FROM HABITACION
      WHERE HABITACION.COD_HAB NOT IN
    (SELECT COD_HAB
      FROM ESTANCIA
      WHERE (((ESTANCIA.FECHAI>=:FI) AND
 (ESTANCIA.FECHAF<=:FF)) OR ((ESTANCIA.FECHAI<=:FI)
AND ((ESTANCIA.FECHAF>=:FI) AND (ESTANCIA.FECHAF<=:FF)))
OR (((ESTANCIA.FECHAI>=:FI) AND (ESTANCIA.FECHAI<=:FF))
AND (ESTANCIA.FECHAF>=:FF)) OR ((ESTANCIA.FECHAI<=:FI)
AND (ESTANCIA.FECHAF>=:FF))))
    AND HABITACION.COD_HAB NOT IN
    (SELECT HAB_RESERVADA.COD_HAB
    FROM HAB_RESERVADA,RESERVA
    WHERE HAB_RESERVADA.COD_R=RESERVA.COD_R
    AND (((RESERVA.FECHAI>=:FI) AND
(RESERVA.FECHAF<=:FF)) OR ((RESERVA.FECHAI<=:FI)
AND ((RESERVA.FECHAF>=:FI) AND (RESERVA.FECHAF<=:FF)))
 OR (((RESERVA.FECHAI>=:FI) AND (RESERVA.FECHAI<=:FF))
AND (RESERVA.FECHAF>=:FF)) OR ((RESERVA.FECHAI<=:FI)
 AND (RESERVA.FECHAF>=:FF))))
    group by tipo
    INTO :NUM,:TIPO DO
      BEGIN
          SUSPEND;
      END
END!!
SET TERM;!!

De esta forma sólo saco el nº de habitaciones libres por
tipo que hay entre esas 2 fechas, que generalmente suele
ser un mes, por ejemplo: del FI = 01/08/05 y FF= 31/08/05.

Yo necesito que ademas de esto me lo saque por días, es decir,
que me saque el nº de habitaciones libres segun el tipo de
habitaciones que sea (INDIVIDUAL, DOBLE, SUITE...) por día
desde entre esta fecha fi y ff. Por ejemplo si cojo el mes de agosto
que me saque las habitaciones libres por tipo del día 1,2,3,4,5....
así hasta el día 31.

Lo he intentado con el Extract pero me da error.

Por favor si alguien puede ayudarme. Muchas gracias
por todo


La franja horaria es GMT +2. Ahora son las 22:00:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi