Génération d'état de la chambre d'hôtel dans SQL

J'ai une structure de table comme celle-ci

id int checkinttime datetime checkouttime datetime roomid int 

J'ai enregistré l'heure d'logging et de caisse dans cette table. Ma question est comment générer un rapport par date qui génère si la pièce occupée ou non dans cette plage de dates comme ceci.

 room 3/1/2016 3/2/2016 3/3/2016 6/4/2016 r1 PVVP r2 vppp 

où p signifie Occupé, et V signifie vacant. Comment écrire SQL pour cela.?

Merci d'avance.

C'est la structure. le client sélectionne la date de début et la date de fin. Avec ces paramètres, les détails de la pièce et de la date sont nécessaires.

Une solution consiste à utiliser une requête statique sur les pièces sous forme de colonnes comme celle-ci:

 ;WITH dates(date) AS ( SELECT @startDate UNION ALL SELECT DATEADD(DAY, 1, date) FROM dates WHERE date < @endDate ), occupied AS ( SELECT date, c.booking_id FROM dates d LEFT JOIN -- You can use `JOIN` only also to remove free dates CheckStatus c ON d.date BETWEEN c.checkin_time AND c.checkout_time ) SELECT date , MIN(CASE WHEN id = 1 THEN 'P' ELSE 'V' END) AS 'r1' , MIN(CASE WHEN id = 2 THEN 'P' ELSE 'V' END) AS 'r2' FROM occupied GROUP BY date; 

Le résultat sera comme ceci:

 date | r1 | r2 | -----------+----+----+ 2016-03-01 | P | V | 2016-03-02 | V | P | 2016-03-03 | V | P | 2016-03-04 | V | P |