表A有如下字段:
酒店顾客ID号、现住房间号,入住日期,离开日期(如果还没走的,就用GETDATE()作为离开日期)表B中放置顾客的换房间记录(少数情况,但有记录),有如下字段:
酒店顾客ID号、原房间号,现房间号,换房日期现要统计从某一天@frm 到 另一天@to 中,每个房间处于“有人入住”的状态的总天数得到的查询格式应该如下:
处于“有人入住”的总天数 房间利用率
A 房 10 50%
B 房 20 100%
C 房 5 25%
D 房 15 75%
谢谢指教
酒店顾客ID号、现住房间号,入住日期,离开日期(如果还没走的,就用GETDATE()作为离开日期)表B中放置顾客的换房间记录(少数情况,但有记录),有如下字段:
酒店顾客ID号、原房间号,现房间号,换房日期现要统计从某一天@frm 到 另一天@to 中,每个房间处于“有人入住”的状态的总天数得到的查询格式应该如下:
处于“有人入住”的总天数 房间利用率
A 房 10 50%
B 房 20 100%
C 房 5 25%
D 房 15 75%
谢谢指教
----------------------------------
select 现住房间号,
sum(GetDays(离开日期-入住日期)) as 有人入住总天数,
cast(sum(GetDays(离开日期-入住日期))*100/GetDays(@to-@frm) as varchar 3)+'%' --包含性质的天数还应该+1
where 入住日期>=@frm and 离开日期<=@to
group by 现住房间号
----------------------------------
sum(GetDays(离开日期-入住日期)) 并不一定等于 有人入住总天数
因为离开日期和入住日期,可能仅有一部分时间段,和 @frm 及 @to 之间重合,有时入住日期比
@frm要早,或入住日期比@to 要晚,这样统计出来的(离开日期-入住日期),就不是在@frm 到 另一天@to 天中所占的天数。
离开日期,@to的早晚关系
sum(GetDays(getSmallerDay(离开日期, @to)-getBiggerDay(入住日期, @from)))
这个方法很有效,但还不是我要的结果,因为我要的是分房间的统计,而且顾客又不一定总在一个房间住(也就是说不能用当前所住的房间来考虑),还要把换房的情况考虑进去
TechnoFantasy(冰儿马甲www.applevb.com) 有方法有一个缺陷,就是如果顾客的离开日期和入住日期的时间段,和 @frm 及 @to 之间根本没有任何重合,也会统计出结果