citt
Messages postés209Date d'inscriptiondimanche 8 juin 2003StatutMembreDernière intervention 9 février 2012
-
9 sept. 2008 à 11:31
citt
Messages postés209Date d'inscriptiondimanche 8 juin 2003StatutMembreDernière intervention 9 février 2012
-
12 sept. 2008 à 09:57
Bonjour,
Je voudrait savoir comment réaliser une requete me donnant le taux d'occupation de chambres.
Voici ma table :
CREATE TABLE [dbo].[reservation] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[id_chambre] [int] NULL ,
[dt_deb] [datetime] NULL ,
[dt_fin] [datetime] NULL
) ON [PRIMARY]
GO
et voici les données :
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-01', '2008-08-05');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-06', '2008-08-15');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(1, '2008-08-16', '2008-08-30');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(2, '2008-07-25', '2008-09-30');
INSERT INTO reservation(id_chambre, dt_deb, dt_fin) VALUES(3, '2008-08-05', '2008-09-30');
Et la je voudrait connaitre le taux d'occupation pour le mois 08, j'ai creer une requete pour le moment mais elle n'arrive pas a prendre en compte pour la chambre ayant l'id 2 qu le taux d'occupation est a 100%
Qq a deja eut ca a faire ?
Merci d'avance,
Citt_jr
Bats toi avec les meilleurs, crève avec le reste
-- Donne le premier jour du mois, le dernier et le nombre de jour du mois
SELECT @Dt_Deb_Month, @Dt_Fin_Month, @Nb_Jours_Mois
SELECT
SUM( CASE WHEN Dt_Deb >= @Dt_Deb_Month AND Dt_FIn <= @Dt_Fin_Month THEN (DATEDIFF("d", Dt_Deb, Dt_Fin)+1)
WHEN Dt_Deb < @Dt_Deb_Month AND Dt_FIn <= @Dt_Fin_Month THEN (DATEDIFF("d", @Dt_Deb_Month, Dt_Fin)+1)
WHEN Dt_Deb >= @Dt_Deb_Month AND Dt_FIn > @Dt_Fin_Month THEN (DATEDIFF("d", Dt_Deb, @Dt_Fin_Month)+1)
WHEN Dt_Deb < @Dt_Deb_Month AND Dt_FIn > @Dt_Fin_Month THEN @Nb_Jours_Mois
END) as Nb_Jours, id_chambre
FROM reservation
WHERE ((Dt_Deb > @Dt_Deb_Month AND (Dt_Deb < @Dt_Fin_Month OR Dt_Fin < @Dt_Fin_Month)) OR
(@Dt_Deb_Month > Dt_Deb AND (@Dt_Deb_Month < Dt_Fin OR @Dt_Fin_Month < Dt_Fin)) OR
(Dt_Deb = @Dt_Deb_Month AND (Dt_Fin IS NOT NULL AND @Dt_Fin_Month IS NOT NULL)))
GROUP BY id_chambre
Citt_jr
Bats toi avec les meilleurs, crève avec le reste
citt
Messages postés209Date d'inscriptiondimanche 8 juin 2003StatutMembreDernière intervention 9 février 20123 9 sept. 2008 à 14:31
Voici le début de ma requête :
SELECT SUM((DATEDIFF("d", Dt_Deb, Dt_Fin)+1)), id_chambre
FROM reservation
WHERE ((Dt_Deb > convert(datetime, '2008-08-01') AND (Dt_Deb < convert(datetime, '2008-08-30') OR Dt_Fin < convert(datetime, '2008-08-30'))) OR
(convert(datetime, '2008-08-01') > Dt_Deb AND (convert(datetime, '2008-08-01') < Dt_Fin OR convert(datetime, '2008-08-30') < Dt_Fin)) OR
(Dt_Deb = convert(datetime, '2008-08-01') AND (Dt_Fin IS NOT NULL AND convert(datetime, '2008-08-30') IS NOT NULL)))
GROUP BY id_chambre
Elle me permet de récupérer le nombre de jour d'occupation, mais elle prend en compte trop de valeur !!
Citt_jr
Bats toi avec les meilleurs, crève avec le reste