SQL如何通过检查列值来实现if和else

时间:2015-06-24 11:42:08

标签: sql ms-access

下表包含客户预订。客户来到此表中创建一条记录,并且该表的最后一天将通过放置当前时间来更新其checkout_date字段。

表格 Reservations Table

现在我需要提取所有消费夜晚的客户。

查询

SELECT reservations.customerid, reservations.roomno, rooms.rate, 
reservations.checkin_date, reservations.billed_nights, reservations.status,
DateDiff("d",reservations.checkin_date,Date())+Abs(DateDiff("s",#12/30/1899
14:30:0#,Time())>0) AS Due_nights FROM reservations, rooms  WHERE
 reservations.roomno=rooms.roomno;

我需要的是,如果客户有结账状态,将按照结账日期而不是当前日期计算到期夜晚checkin_date,如果客户有结帐日期,则无需从{{1}添加额外的绝对值}。

我当前的查询视图如下,同时我的计算机时间为14:30,因此它会为每个查询添加14:39

current query Views

1 个答案:

答案 0 :(得分:1)

由于您要计算截止日期之前的截止日期,以及是否仍在使用当前日期进行检查。我建议你使用立即If。

要检查的条件是房间的status。如果是checkout,则使用checkout_date,否则请使用Now(),例如。

SELECT 
    reservations.customerid, 
    reservations.roomno, 
    rooms.rate, 
    reservations.checkin_date, 
    reservations.billed_nights, 
    reservations.status,
    DateDiff("d", checkin_date, IIF(status = 'checkout', checkout_date, Now())) As DueNights
FROM 
    reservations 
    INNER JOIN      
    rooms  
    ON reservations.roomno = rooms.roomno;

您可能已经注意到,我使用了JOIN。这比使用公共标识符合并两个表更有效。希望这有帮助!