使用列中的其他值填充空白/空值

时间:2014-12-10 01:14:14

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

我有一个像这样设置的列:

-----Col_2-----
     Value 1



     Value 2



 -----------------

正如您所看到的,列中有2个值,但也有许多空格。我想要做的是运行Update查询,用2值替换空格。我想要的是将列更新为:

 -------Col_2---------
       Value 1
       Value 1
       Value 1
       Value 2
       Value 2
       value 2
 ---------------------

基本上我想运行查看第一个not null值的查询,并用该非null值替换以下空值,直到它达到下一个非null值。一旦它达到下一个非空值,它就会继续用新值替换以下空值。目前,我已经设置好了。

Update Table1,
 (Select TOP 1 Col_1 AS Z FROM Table1 Where Col_1 Is Not Null)
  Set Col_1 = Z
 Where Col_1 Is Null;

这将使用第一个非null值替换每个null值,但是一旦它到达下一个非null值就不会停止。这导致我得到这样的东西:

---------Col_2-----------
       Value 1
       Value 1
       Value 1
       Value 2
       Value 1
       Value 1
-------------------------

有没有办法在访问时添加某种“直到”此语句为止?我知道你可以运行if,然后运行PHP和其他语言的语句,但不知道如何在访问或直接SQL中执行此操作。

更新:

第二列包含帐号,与COL_1中的值相关联。原始设置看起来像这样。

-----Col_1-------Col_2------
    12345         Value 1
    12345         
    12345
    54321         Value 2
    54321         
    54321         
------------------------------

有没有办法使用Col_1让Col_2看起来像:

    --------Col_2---------
           Value 1
           Value 1
           Value 1
           Value 2
           Value 2
           Value 2
      ----------------------

无需在查询中手动输入Col_1的数字?我的意思是,我不想在查询中手动输入“12345”或“54321”,而是让事情自动发生。

2 个答案:

答案 0 :(得分:0)

假设我正确理解您的问题,您可以使用更新语句,将表连接回自身。我认为这是Access中的正确语法:

update Table1 
inner join Table1 t2 on Table1.col1 = t2.col1 and t2.col2 is not null
set Table1.col2 = t2.col2

答案 1 :(得分:0)

一种方法:

UPDATE SomeData SDOuter
SET Col_2 = (SELECT MAX(SDInner.Col_2) FROM SomeData SDInner WHERE SDInner.Col_1 = SDOuter.Col_1 AND Col_2 IS NOT NULL)
WHERE Col_2 IS NULL;

SQL Fiddle