MS_Access中单个查询中的多个操作

时间:2013-02-14 12:51:02

标签: sql ms-access ms-access-2007

我可以在单个查询中执行多个操作,还是必须对我想要进行的每个更改进行查询?

我有一个列“Type”,它可以有字符串值“BOOL”,“WORD”或“DINT”

在一个查询中,我想:

  • 将所有“BOOL”更改为“DIGITAL”
  • 将所有“WORD”改为“UINT”
  • 将所有“DINT”更改为“LONG”

是否可以在一个查询中执行此操作(如果是,如何?)

或者我必须做出这样的几个查询:

UPDATE DB_Total SET Type = 'DIGITAL'
WHERE Type='BOOL';

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以使用嵌套的IIF语句:

UPDATE  DB_Total
SET     Type = IIF(Type='BOOL','DIGITAL',
                    IIF(Type='WORD','UINT',
                        IIF(Type='DINT','LONG',Type)
                    )
                )
WHERE   Type IN ('BOOL', 'WORD', 'DINT');

(我通常会在一行中写下IIF部分,但我已经完成了换行,因此更容易阅读)

答案 1 :(得分:2)

Switch()视为嵌套IIf()表达式的替代方法。

将此数据放在DB_Total ...

id Type
 1 BOOL
 2 abc
 3        <-- Type is Null
 4 WORD
 5 DINT

...此查询更新DB_Total,如下所示......

UPDATE DB_Total
SET [Type] = Switch(
    [Type]='BOOL','DIGITAL',
    [Type]='WORD','UINT',
    [Type]='DINT','LONG'
    )
WHERE [Type] IN ('BOOL', 'WORD', 'DINT');

DB_Total之后:

id Type
 1 DIGITAL
 2 abc
 3 
 4 UINT
 5 LONG

但是,您可能会发现更方便的不同方法。创建一个replacements表:

id old_type new_type
 1 BOOL     DIGITAL
 2 WORD     UINT
 3 DINT     LONG

然后,此UPDATE语句将对DB_Total版本产生与Switch()相同的更改。

UPDATE DB_Total AS d
INNER JOIN replacements AS r
ON d.Type = r.old_type
SET d.Type = [r].[new_type];

将来,如果您需要更改或添加/删除单词替换对,则只需编辑replacements表。然后,您不需要修改查询。