Sql MS Access查询:在Switch()函数中使用select语句

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

我正在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 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
是视图还是表?你有权更新它吗?