select * from worklog where worklog.recordkey IN
case
when worklog.class ='ACTIVITY' THEN (SELECT wonum from woactivity where parent ='M2176' )
when worklog.class ='WORKORDER' THEN (SELECT WONUM FROM WORKORDER WHERE WONUM = 'M2176')
end ;
SELECT * from worklog
WHERE CASE WHEN worklog.class='ACTIVITY' THEN
worklog.recordkey in (select wonum from woactivity where parent='M2176' )
end
WHEN worklog.class='WORKORDER' THEN
worklog.recordkey = (select wonum from workorder where wonum='M2176')
end ;
在上述查询中,我需要在worklog.recordkey中设置一个值。当worklog.class为'ACTIVITY'时,我有两个条件,我必须从WOACTIVITY wonum设置增值税值,如果worklog.class为'WORKORDER',则必须从WORKORDER表设置值。当我使用上面的查询时,我得到类似错误:
'关键字'in'附近的语法不正确]
和
'关键字'case'附近的语法不正确。
请帮助我。
case
表达式,改用正则AND
/ OR
:SELECT * from worklog
WHERE (worklog.class = 'ACTIVITY' and
worklog.recordkey in (select wonum from woactivity where parent='M2176'))
OR (worklog.class='WORKORDER' AND
worklog.recordkey = (select wonum from workorder where wonum='M2176'))
CASE
。我认为您可以使用布尔运算符完成您要执行的操作workorder
是一个表,而woactivity
基本上是该表where woclass = 'ACTIVITY'
上的视图,所以您可以通过以下方式简化查询: