【发布时间】:2015-12-11 01:24:14
【问题描述】:
这里是查询
`select
p.occid,
p.occdate,
f.fillername,
badgeID= null,
p.mc
p.mctime,
problemcode = isnull(p.problemcode,400),
pc.problemdesc,
p.timerresolved,
p.duration,
e.employeename,
pl.durationinminutes,
pl.timein,
pl.timeout,
problemdescription = datediff(minute,occdate,timeresolved)
from problem as p
left join filler as f
on p.fillerid = f.fillerid
left join problemlog as pl
on p.occid = pl.occid
left join problemcode as pc
on p.problemcode = pc.problemcode
left join employee as e
on pl.badgeid = e.id
where f.intials = @fillerselect and
occdate between dateadd(day, datediff(day, '19000101', @startdate),
cast(@starttime as datetime2(7))) and
dateadd(day, datediff(day, '19000101', cast @endtime as datetime2(7)))
and p.problemcode in (@problemcode)
and @Duration <= datediff(minute, occdate, timeresolved)
and case when @reportparameter like 'false'
then e.employeename in (@employee)`
我的问题在于 case 子句。我收到一条错误消息,指出“关键字 'in' 附近的语法不正确。有人知道如何克服这个问题吗?
我应该提到@employee 可以有多个选择。当@reportparameter 为“False”时,@employee 为“None”,说明我们没有按员工过滤。当@reportparameter 为“true”时,我们按员工过滤,@employee 可能有也可能没有多项选择。
【问题讨论】:
-
你不能这样使用
CASE。见stackoverflow.com/questions/8785209/…
标签: sql-server-2008 tsql