0

我需要帮助编写一个更新查询来帮助我清理下表。我一直在手动完成每一行,这只是一个漫长而疲惫的过程。

有没有办法编写一次更新整个表的更新查询。

The rules:
1. All fields ending with m1 should only contain a value of 'aprn' 
2. All fields ending with m2 should only contain a value of 'pa'
3. If 'pa' does exist in a field ending with m1 then that means that field should be NULL and the value 'pa' should be moved to the m2 column. 


table_a
org_id org_name     a_m1   a_m2    b_m1     b_m2
1       north       aprn   pa      aprn     pa
2       south       null   null    pa       null
3       east        pa     null    pa       null
4       west        null   pa      null     pa


Correct: ORG_ID=1 (a_m1, a_m2, b_m1, b_m2)
Correct: ORG_ID=4 (a_m1, a_m2, b_m1, b_m2)
Correct: ORG_ID=2 (a_m1, a_m2)

Incorrect: ORG_ID=2 (b_m1, b_m2)
Incorrect: ORG_ID=3 (a_m1, a_m2, b_m1, b_m2)
4

2 回答 2

0
update table_a
set
a_m2 = case when a_m1 = 'pa' or a_m2 = 'pa' then 'pa' end
, b_m2 = case when b_m1 = 'pa' or b_m2 = 'pa' then 'pa' end
, a_m1 = case when a_m1 = 'aprn' then a_m1 end
, b_m1 = case when b_m1 = 'aprn' then b_m1 end

SQL Fiddle 与演示

它当然适用于您的数据集。如果这对您不起作用,请在您的问题中添加更多详细信息。

于 2013-04-20T21:16:41.100 回答
0

如果我正确理解您的问题,我怀疑多个更新语句可能是最好的。我喜欢对更改数据的语句做的一件事是让它们保持简单。我更喜欢编写多个语句,让 RDBMS 做更多的工作,更慢,等等,但总是正确的。从错误的数据更改中恢复可能很困难。

我不确定我是否完全理解您的标准,但类似于以下内容。如果我理解正确,您是否需要在 1. 和 2. 之前运行 3.?

  1. update table_a
       set a_m1 = 'aprn'
     where a_m1 = 'pa';
    
  2. update table_a
       set a_m2 = 'pa'
     where a_m2 = 'aprn';
    
  3. update table_a
       set a_m1 = NULL
       set a_m2 = 'pa'
     where a_m1 = 'pa';
    
    update table_a
       set b_m1 = NULL
       set b_m2 = 'pa'
     where b_m1 = 'pa';
    
于 2013-04-20T21:17:07.037 回答