查询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 ;
问题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设置vat值,如果worklog.class为“workorder”,则必须从workorder表设置值。当我使用上述查询时,会出现如下错误:
“”中关键字“附近的语法不正确”
和
“关键字”“case”“附近的语法不正确。”。
请帮帮我。
5条答案
按热度按时间nzkunb0c1#
因为
workorder
是一张tablewoactivity
基本上就是那张table上的一个视图where woclass = 'ACTIVITY'
,您可以通过以下方式简化查询:如果上面的内容在sql server上不适用,请根据@dex的评论,将其翻过来:
注意,我添加了
siteid
加入比较组合,因为workorder
是站点级别的信息。xriantvc2#
跳过
case
表达式,使用正则表达式AND
/OR
取而代之的是:o2g1uqev3#
如上所述:
1) workorder是一个基表,woactivity将根据workorder.woclass属性限制此表的视图
2) workorder对象的逻辑键是siteid+wonum。i、 在整个环境中,wonum值可能不是唯一的。
3) 与特定工单相关的所有记录将具有相同的sited+wogroup值。
4) 主工单记录的istask=0和wonum=wogroup,而关联的活动的istask=1。
blmhpbnm4#
你不需要使用
CASE
. 我想你可以用布尔运算符来完成你想做的事情查询1
查询2
在这里,我也改变了第二个条件
worklog.recordkey
,来自=
至in
```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 in
(select wonum from workorder where wonum='M2176'))
ztyzrc3y5#
你也可以用这个。