Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何通过检查列值实现if和else_Sql_Ms Access - Fatal编程技术网

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,我看到该标记已被删除。