Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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/5/sql/74.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
Mysql查询空字段替换为自定义if语句_Mysql_Sql_Case_Inner Join - Fatal编程技术网

Mysql查询空字段替换为自定义if语句

Mysql查询空字段替换为自定义if语句,mysql,sql,case,inner-join,Mysql,Sql,Case,Inner Join,我有下面的Mysql查询并没有像预期的那样工作。我不是Mysql专家,但基本上我要做的是,对于每个AptStatus=3,我都有一个空字段用于Operatory。对于位置的每个计数,我想将该空字段转换为操作名称。(希望这是有道理的) 样本数据 该位置具有来自同一表的这些运算符 预期的结果是这样的 有什么想法吗?您似乎想加入团队: select o.location, o.aptdate, case when o.aptstatus = 3 then '08:0

我有下面的Mysql查询并没有像预期的那样工作。我不是Mysql专家,但基本上我要做的是,对于每个AptStatus=3,我都有一个空字段用于Operatory。对于位置的每个计数,我想将该空字段转换为操作名称。(希望这是有道理的)

样本数据

该位置具有来自同一表的这些运算符

预期的结果是这样的


有什么想法吗?

您似乎想加入
团队

select 
    o.location, 
    o.aptdate, 
    case when o.aptstatus = 3 then '08:00:00' else o.apttime   end as apttime, 
    case when o.aptstatus = 3 then 540        else o.aptlength end as aptlength,
    o.aptstatus, 
    o.operatory, 
    a.operatory as operatorynum
from rpt_officeschedules o
inner join apptwidget_operatorie a on a.location = o.location
where 
    o.apttime between '07:59:00' and '17:30:00' 
    and o.aptdate between '2020-11-07' and '2020-11-08' 
    and (o.operatory like '%np%' or o.operatory like '%open%' or o.operatory is null)
order by o.location, o.aptdate, o.operatorynum, o.apttime, o.operatory;

我认为您可能希望循环第二个表,以循环方式分配值。如果是,您可以使用窗口功能:

select os.Location, os.AptDate, 
       (case when os.AptStatus = 3 then '08:00:00' else os.AptTime end) as AptTime,
       (case when os.AptStatus = 3 then 540 else os.AptLength end) as AptLength,
       os.AptStatus, os.OperatoryNum, os.Operatory
from (select os.*,
             row_number() over (partition by location order by atpdate) as seqnum
      from rpt_officeschedules os
      where os.AptTime between '07:59:00' and '17:30:00' and
            os.AptDate between '2020-11-07' and '2020-11-08' and
            (Operatory LIKE '%NP%' or Operatory LIKE '%OPEN%'or Operatory is null )
     ) os join
     (select aw.*, count(*) over (partition by location) as cnt,
             row_number() over (partition by location order by location) as seqnum
      from appwidget ap
     ) ap
     on os.location = ap.location and
        (os.seqnum - 1) % sp.cnt = ap.seqnum - 1
order by os.Location, os.AptDate, os.OperatoryNum, os.AptTime, os.Operatory;

对不起,忘了提一下,我只有一张桌子,不幸的是,我之前写的和你们一样,但我不得不从一张桌子上取下来time@chewie例如我不明白。您的问题显示了两个表:一个在查询中,
rpt_officeschedules
,另一个在查询后显示在questioapptwidget_操作符中,
apptwidget_操作符
@chowie:您的问题的更新基本上会使发布的两个答案无效,并且使问题变得不清楚(至少在我看来…)。您可能想问一个新问题,从表中提供正确的示例数据和相应的所需结果(以表格文本形式)。[42000][1064]您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用near的正确语法(根据AptDate的位置顺序划分)正如第6I行rpt_officeschedule'中的seqnum更新了我的预期结果,我才意识到这是错误的
select os.Location, os.AptDate, 
       (case when os.AptStatus = 3 then '08:00:00' else os.AptTime end) as AptTime,
       (case when os.AptStatus = 3 then 540 else os.AptLength end) as AptLength,
       os.AptStatus, os.OperatoryNum, os.Operatory
from (select os.*,
             row_number() over (partition by location order by atpdate) as seqnum
      from rpt_officeschedules os
      where os.AptTime between '07:59:00' and '17:30:00' and
            os.AptDate between '2020-11-07' and '2020-11-08' and
            (Operatory LIKE '%NP%' or Operatory LIKE '%OPEN%'or Operatory is null )
     ) os join
     (select aw.*, count(*) over (partition by location) as cnt,
             row_number() over (partition by location order by location) as seqnum
      from appwidget ap
     ) ap
     on os.location = ap.location and
        (os.seqnum - 1) % sp.cnt = ap.seqnum - 1
order by os.Location, os.AptDate, os.OperatoryNum, os.AptTime, os.Operatory;