2014-10-08 72 views
0

我正在使用switch()函数获取MS Access查询中的条件更新。下面是我的查询MS Access查询:在Switch()函数中使用select语句

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 (expression1, value1, expression2, value2, ... expression_n, value_n) 

我刚才提出的,而不是通过静态值“”一种修饰,即部分我通过选择查询动态获取此值。

但是,当我试图执行其声称的错误信息查询:

The query must be an updatable query 

我相信这个问题是选择语句内切换()函数,但我需要户口本上有条件更新我的项目。

任何人都可以提供任何合适的解决方案吗?我也想知道我们可以在Switch()语法中传递“Value”部分的动态值吗?

回答

0

我不知道这是不是你的问题,但通常的子查询必须用括号括起来:

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' 
          ) 
         ); 
+0

你有没有测试过你的子查询?@Gordon Linoff.When当我尝试你的子查询访问时,它报告了我**查询表达式**中的语法错误。此外,你的**()**子查询的第一个解决方案不符合我的目的它报告了与我在问题中提到的相同的错误消息。 – 2014-10-08 14:02:47

+0

'T_Generated_OpportunityLine'是一个视图还是一个表?你有权更新它吗? – 2014-10-08 14:13:14

+0

它是一个数据库表。我有权更新它。 – 2014-10-08 14:16:45