sql更新查询

时间:2010-01-18 07:11:15

标签: sql

我需要一个更新查询来将空值设置为同一组中的另一个值

例如

 Table
    filed1   filed2      filed3
    1          e         1/1/2009
    1          e         null
    1          e         1/1/2009
    2          f         2/2/2009
    2          f         2/2/2009
    2          f         null
    3          g         3/3/2009
    3          g         null

预期结果

filed1   filed2      filed3
1          e         1/1/2009
1          e         1/1/2009
1          e         1/1/2009
2          f         2/2/2009
2          f         2/2/2009
2          f         2/2/2009
3          g         3/3/2009
3          g         3/3/2009

2 个答案:

答案 0 :(得分:1)

您使用的是哪个数据库服务器?在Oracle中,这可能有效,假设filed3对于组中的每一行都是相等的,或者为null:

EMPI@XE > select * from sov;

    FILED1 F FILED3
         1 e
         1 e 1/1/2009
         1 e 1/1/2009
         2 g 1/2/2009
         2 g 1/2/2009
         2 g

EMPI@XE > update sov s
  2    set
  3        s.filed3 =
  4            (select filed3
  5               from sov so
  6               where so.filed1 = s.filed1
  7                        and so.filed2 = s.filed2
  8                        and so.filed3 is not null
  9                    and rownum = 1)
 10   where filed3 is null;

EMPI@XE > select * from sov;

    FILED1 F FILED3

         1 e 1/1/2009
         1 e 1/1/2009
         1 e 1/1/2009
         2 g 1/2/2009
         2 g 1/2/2009
         2 g 1/2/2009

答案 1 :(得分:0)

-- note table1 is your table

UPDATE t1 set t1.filed3 = t2.filed3 
from table1 t1, table1 t2
where t1.filed3 is null
and t2.filed3 is not null 
and t1.filed2 = t2.filed2 and 
t1.filed1 = t2.filed1