1.)列出迄今为止收到的每家酒店的收入,即DepartureDate<现在()。必须在SQL语句中完成计算。使用DateDiff函数确定每个预留的长度(即天数),并将此值乘以房价(而不是折扣率)。在输出中包含酒店编号。
到目前为止,我已经尝试了这个但是它不对,并且给了我DateDiff语句的聚合函数错误
SELECT ROOM.HotelNo, DateDiff("d", [ArrivalDate], [DepartureDate]) * ROOM_TYPE.RoomRate AS TotalRevenue
FROM RESERVATION, ROOM_TYPE, ROOM
WHERE ROOM.RoomType = ROOM_TYPE.RoomType
AND RESERVATION.RoomNo = ROOM.RoomNo
AND DepartureDate > Now()
GROUP BY ROOM.HotelNo;
以下是您可以看到表
的链接RelationShip Table < - LINK
请帮我解决这个问题
答案 0 :(得分:1)
使用Sum()
表达式的DateDiff()
来避免“不包含指定的表达式...作为聚合函数”投诉的一部分。
SELECT
ROOM.HotelNo,
Sum(
DateDiff(
"d",
[ArrivalDate],
[DepartureDate]
) * ROOM_TYPE.RoomRate
) AS TotalRevenue
WHERE
条款包含DepartureDate > Now()
,我怀疑该结果会将结果过滤给那些尚未离开的人。我想你想要<
而不是>
。
考虑使用INNER JOIN
而不是使用WHERE
子句来指定表中的行如何匹配。如果您可以从Access查询设计器的“设计视图”构建此查询,则设置连接将很容易。并且当连接超过2个表时,查询设计者知道有关所需括号的规则...因此将产生使数据库引擎保持满意的SQL。
答案 1 :(得分:0)
正如engineersmnky指出的那样,您的DATEDIFF是错误的。它应该是2个参数,然后离开然后到达日期:
SELECT
ROOM.HotelNo,
DATEDIFF(RESERVATION.DepartureDate, RESERVATION.ArrivalDate) * ROOM_TYPE.RoomRate AS TotalRevenue
FROM RESERVATION
JOIN ROOM ON
RESERVATION.RoomNo = ROOM.RoomNo
JOIN ROOM_TYPE ON
ROOM.RoomType = ROOM_TYPE.RoomType
WHERE RESERVATION.DepartureDate > NOW()
GROUP BY ROOM.HotelNo;
我不确定为什么你在DepartureDate和ArrivalDate周围都有括号,因为它们只是RESERVATION表上的列是正确的?