Sql MS Access查询:在Switch()函数中使用select语句
我正在MS Access查询中使用switch()函数进行条件更新。下面是我的问题Sql MS Access查询:在Switch()函数中使用select语句,sql,ms-access,Sql,Ms Access,我正在MS Access查询中使用switch()函数进行条件更新。下面是我的问题 UPDATE T_Generated_OpportunityLine SET PlContact_c = Switch( LowestlevelValue_c='PTFDS - FD ENCLOSURE SYSTEMS',Select OpportunityLine_PostCode.SESA from OpportunityLine_PostCode,T_Generated_OpportunityLine
UPDATE T_Generated_OpportunityLine SET PlContact_c = Switch(
LowestlevelValue_c='PTFDS - FD ENCLOSURE SYSTEMS',Select OpportunityLine_PostCode.SESA from OpportunityLine_PostCode,T_Generated_OpportunityLine where OpportunityLine_PostCode.Postcode=T_Generated_OpportunityLine.Selected_Zip AND
OpportunityLine_PostCode.OpptyLine_Ref='PTFDS',
LowestlevelValue_c='DOOR ENTRY SYSTEM',Select OpportunityLine_PostCode.SESA from OpportunityLine_PostCode,T_Generated_OpportunityLine where OpportunityLine_PostCode.Postcode=T_Generated_OpportunityLine.Selected_Zip AND
OpportunityLine_PostCode.OpptyLine_Ref='Door Entry System'
);
我知道switch()函数的语法:
Switch ( expression1, value1, expression2, value2, ... expression_n, value_n )
我刚刚做了一个修改,即不是为“值”部分传递静态值,而是通过选择查询动态获取该值
但当我尝试执行查询时,它会显示一条错误消息:
The query must be an updatable query
我确信问题出在Switch()函数中的Select语句上,但由于我的项目,我需要这个条件更新
有人能提供合适的解决方案吗?我还想知道我们能否在Switch()语法中为“value”部分传递动态值?我不知道这是否是您的问题,但通常子查询需要用括号括起来:
UPDATE T_Generated_OpportunityLine
SET PlContact_c = Switch(LowestlevelValue_c='PTFDS - FD ENCLOSURE SYSTEMS',
(Select SESA
from OpportunityLine_PostCode
where OpportunityLine_PostCode.Postcode = T_Generated_OpportunityLine.Selected_Zip AND
OpportunityLine_PostCode.OpptyLine_Ref = 'PTFDS'
),
LowestlevelValue_c = 'DOOR ENTRY SYSTEM',
(Select SESA
from OpportunityLine_PostCode
where OpportunityLine_PostCode.Postcode = T_Generated_OpportunityLine.Selected_Zip AND
OpportunityLine_PostCode.OpptyLine_Ref='Door Entry System'
));
但是,我只需要一个子查询就可以编写:
UPDATE T_Generated_OpportunityLine
SET PlContact_c = (Select SESA
from OpportunityLine_PostCode as pc
where pc.Postcode = T_Generated_OpportunityLine.Selected_Zip AND
(T_Generated_OpportunityLine.LowestlevelValue_c = 'PTFDS - FD ENCLOSURE SYSTEMS' AND pc.OpptyLine_Ref = 'PTFDS' OR
T_Generated_OpportunityLine.LowestlevelValue_c = 'DOOR ENTRY SYSTEM' AND op.OpptyLine_Ref='Door Entry System'
)
);
你测试过你的子查询吗?@Gordon Linoff。当我在access中尝试你的子查询时,它报告了我查询表达式中的语法错误。此外,你在子查询中放入()的第一个解决方案并没有达到我的目的,它报告了与我在问题中提到的相同的错误消息。
t\u Generated\u OpportunityLine
是视图还是表?你有权更新它吗?