[英]Syntax error in Sql MS-Access
我的问题:业主想知道到目前为止每个酒店的每个房间类型产生的收入(即where CheckOutDate < DATE()
)。
计算必须在 SQL 语句中完成。
使用 DateDiff 函数datediff('d', checkindate, checkoutdate)
确定每次预订的逗留时间(即天数datediff('d', checkindate, checkoutdate)
并将该值乘以房价。
您的输出格式应如下页所示。 您的收入总额可能会有所不同。 请记住,收入金额可能每天都在变化,因为我们只想包括已完成的预订,而不是当前或未来的预订。
select
room.hotelID, room.roomtype,
datediff('d', Reservation.CheckOutDate, Reservation.CheckInDate) * ROOM_TYPE.RoomRate as Revenue
from
Reservation
inner join
Room on Room.hotelID = Reservation.HotelID
inner join
ROOM_TYPE on ROOM_TYPE.RoomType = Room.roomtype
group by
Room.HotelID, Room.roomtype;
我在此中缺少语法错误语句。
如何解决 MS Access 中的此错误?
使用 Group By 子句时,任何不属于分组的列都必须聚合。 在您的情况下, Room.HotelID 和 Room.RoomType 是分组列。 所以它们在你的 SELECT 子句中没问题,原样。 但收入需要汇总。 我希望您希望使用 SUM 聚合来汇总每种房间类型的所有收入值。 尝试这个...
select room.hotelID,
room.roomtype,
SUM( datediff(day,Reservation.CheckOutDate,Reservation.CheckInDate )*ROOM_TYPE.RoomRate) as Revenue
from Reservation
inner join Room on Room.hotelID=Reservation.HotelID
inner join ROOM_TYPE on ROOM_TYPE.RoomType=Room.roomtype
group by Room.HotelID, Room.roomtype;
您仍然应该学习如何使用查询生成器,但我认为括号应该是这样的:
select
Room.HotelID, Room.roomtype,
sum(
datediff('d',Reservation.CheckOutDate,Reservation.CheckInDate) *
ROOM_TYPE.RoomRate
) as Revenue
from
((Reservation inner join Room on Room.hotelID = Reservation.HotelID)
inner join ROOM_TYPE on ROOM_TYPE.RoomType = Room.roomtype)
group by
Room.HotelID, Room.roomtype;
所以总结一下:
对您在 Access 2010 中的数据运行以下查询会产生以下结果集:
hotelID roomtype Revenue
------- -------- ----------
1000 D $23,000.00
1000 F $23,100.00
1000 S $20,700.00
1111 D $36,500.00
1111 F $16,450.00
1111 S $15,300.00
SELECT
rm.hotelID,
rm.roomtype,
Sum(DateDiff('d', rs.CheckInDate, rs.CheckOutDate) * rt.RoomRate) AS Revenue
FROM
(
ROOM AS rm INNER JOIN RESERVATION AS rs
ON (rm.roomno = rs.RoomNo) AND (rm.hotelID = rs.HotelID)
)
INNER JOIN ROOM_TYPE AS rt
ON rm.roomtype = rt.RoomType
WHERE rs.CheckOutDate < Date()
GROUP BY rm.hotelID, rm.roomtype;
在 MS Access 中,我们必须在 from 语句中的子句中的括号 () 中提及。 除此之外, datediff 函数必须是聚合函数的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.