使用Union Function创建更新查询?

时间:2014-04-10 16:20:37

标签: sql ms-access ms-access-2010 union

我有一个Excel表,我导入到Access 2010数据库表。唯一的问题是一个字段(健康计划)的数据与我们目前在数据库中使用的数据不一致。例如,正在导入的数据显示" GA"与它应该是什么," CHC - GEORGIA"。我能够一次更改一个简单的更新查询,但我有15个以上的状态需要更改。这就是我在将这些组合成一个查询时所拍摄的内容:

UPDATE [Dan - CSF Quotes] SET [Dan - CSF Quotes].[Health Plan] = "HEALTHAMERICA And HEALTHASSURANCE"
WHERE ((([Dan - CSF Quotes].[Health Plan])="PA"))

UNION 

UPDATE [Dan - CSF Quotes] SET [Dan - CSF Quotes].[Health Plan] = "CHC - GEORGIA"
WHERE ((([Dan - CSF Quotes].[Health Plan])="GA"));

.
.
.
etc

有没有简单的方法可以将值更改/更新到这一个字段?

2 个答案:

答案 0 :(得分:2)

您可以使用SWITCH将不同的条件应用于单个更新语句:

UPDATE [Dan - CSF Quotes] 
SET [Health Plan] = SWITCH
                    (   [Health Plan] = "GA", "CHC - GEORGIA",
                        [Health Plan] = "PA", "HEALTHAMERICA And HEALTHASSURANCE"
                    )
WHERE [Health Plan] IN ("GA", "PA");

答案 1 :(得分:1)

由于您有15个以上的搜索/替换对,请考虑将它们存储在单独的表中,例如下面的 HealthPlanReplacements 示例表。然后,您可以使用UPDATE查询将替换表连接到主数据表。

此查询执行我认为您想要的内容:

UPDATE [Dan - CSF Quotes] AS dq
    INNER JOIN HealthPlanReplacements AS hpr
    ON dq.[Health Plan] = hpr.search_plan
SET dq.[Health Plan] = [hpr].[replace_plan];

这是我用来在Access 2007中测试该查询的 HealthPlanReplacements 表:

search_plan replace_plan
----------- ---------------------------------
GA          CHC - GEORGIA
PA          HEALTHAMERICA And HEALTHASSURANCE