SQL如何通过检查列值实现if和else
下表包含客户预订。客户来此表并在此表中创建一条记录,最后一天此表将通过输入当前时间更新其SQL如何通过检查列值实现if和else,sql,ms-access,Sql,Ms Access,下表包含客户预订。客户来此表并在此表中创建一条记录,最后一天此表将通过输入当前时间更新其checkout\u date字段 表格 现在我需要提取所有过夜的客户 查询 SELECT reservations.customerid, reservations.roomno, rooms.rate, reservations.checkin_date, reservations.billed_nights, reservations.status, DateDiff("d",reservation
checkout\u date
字段
表格
现在我需要提取所有过夜的客户
查询
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
,如果客户具有结帐日期,则无需从14:30
中添加额外的绝对值
我当前的查询视图如下,而且我的计算机时间是14:39
,因此它会将1
添加到每个查询中
因为您要计算截止结账日期的到期日,如果它们仍然被签入,请使用当前日期。我建议你立即使用If 要检查的条件是房间的
状态。如果是签出
,则使用签出日期
,否则使用立即()
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
。这比使用公共标识符合并两个表更有效。希望这有帮助 您的查询看起来像MS Access,因此我正在删除无关的数据库标记。好的,谢谢@GordonLinoff,我已经添加了所有predictions@PaulF,MS Access是否支持交换机外壳?由于Access不支持案例
,请改用IIF
DateDiff(“d”,签入日期,IIF(状态='checkout',签出日期,Now())
@PaulFrancis:当我最初查看该问题时,该问题被标记为MySQL,我看到该标记已被删除。