2011-04-08 48 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