2011-04-08 60 views
0

你好我在一家酒店/別墅相關的預訂系統表的Microsoft SQL Server數據庫和需要幫助創建一些查詢,獲取相關數據:幫助酒店查詢

爲了能夠找到在特定日期退房的客人列表,按別墅類型分組並提供當天的總人數(即計數)。

對於查詢我想我不得不使用2個相關表格客人預約和預約表:

create table guest_reservation(confirm_no int, 
agent_id int, 
g_name varchar (30), 
g_phone varchar (10)); 

create table reservation(
confirm_no int, 
credit_card_no char (16), 
res_checkin_date datetime, 
res_checkout_date datetime, 
default_villa_type char (1), 
price_plan char (1)); 



I thought using a query like this would help, but it didn't seem to: 

SELECT g_name, villa_type, COUNT(*) 
FROM guest_reservation, reservation 
WHERE guest_reservation.confirm_no = reservation.confirm_no 
    AND res_checkout_date = ‘insert date for when you would want to check out here’ 
GROUP BY villa_type; 

想法/幫助?

編輯:我想我找到了第一次的問題...

另一個查詢我想上的是,如果客人想要某種類型的房間,然後如果這類型的房間將可在日期幫助他們想留下來。

我以前只是預約表,但我不知道這很會做我想做的,這是我目前有:

Select villa_type from reservation 
where res_check_in_date not between '2011-10-08' and '2011-10-09' 
and res_check_out_date not between '2011-10-08' and '2011-10-09' 
+0

爲什麼所有的'alter'語句,只是把它放到表格聲明中以便於閱讀。 – JNK 2011-04-08 15:56:07

+0

對不起,只是試圖展示我是如何創建表,涉及的鍵,然後是最後一個查詢後我想要做的事情......這主要是我詢問的最後一個查詢,如何正確使用它以獲取我需要的輸出是什麼? – Jon 2011-04-08 16:00:48

+0

請將它合併到一個'CREATE TABLE'語句中,它會更容易幫助你。我們確實需要查看錶結構來評估查詢。 – JNK 2011-04-08 16:01:39

回答

0

由於時間跨度的性質,你可能會發現它有幫助的,不需要,可以創建一個日曆表格,它只是日曆中靜態的日期列表。這些幾乎總是在BI項目中創建以進行數據分析。

此對象允許您執行的操作是將您的預訂表連接到日曆表格,爲您提供包含時間跨度的不同日期的列表。下面是一個代碼示例:

inner join calendar 
on calendar.date between reservation.res_checkin_date and reservation.res_checkout_date 

例如,如果我在今天(4/12)檢查和週四退房(4/14),加入日曆表將產品3個不同行,一個每個4/12,4/13,4/14。就檢查可用性而言,這更清楚地表明誰在何時佔有什麼。

此外,您可能想要了解一些代碼細微差別,例如使用DATE而不是DATETIME來消除產生意外結果的時間的可能性。如果您需要完整的DATETIME類型,則可以使用efficiently query the DATE in a DATETIME