在情况表达式中使用select子句设置条件

问题描述 投票:0回答:4
  1. 查询1
    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 ;
  1. 查询2:
    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'附近的语法不正确。

请帮助我。

sql sql-server maximo
4个回答
1
投票
跳过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'))


0
投票
您不需要使用CASE。我认为您可以使用布尔运算符完成您要执行的操作

0
投票
您也可以这样做。

0
投票
因为workorder是一个表,而woactivity基本上是该表where woclass = 'ACTIVITY'上的视图,所以您可以通过以下方式简化查询:
© www.soinside.com 2019 - 2024. All rights reserved.