Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
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

Última edición por VRO fecha: 01-09-2005 a las 11:16:43.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:09:00.


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
Copyright 1996-2007 Club Delphi