【发布时间】:2014-12-10 01:14:14
【问题描述】:
我有一个这样设置的列:
-----Col_2-----
Value 1
Value 2
-----------------
如您所见,列中有 2 个值,但也有很多空格。我想做的是运行Update 查询,它将用 2 个值替换空白。我想要的是将列更新为如下所示:
-------Col_2---------
Value 1
Value 1
Value 1
Value 2
Value 2
value 2
---------------------
基本上,我想运行一个查询,该查询查看第一个非空值并用该非空值替换以下空值,直到它遇到下一个非空值。一旦它达到下一个非空值,它就会继续用新值替换以下空值。目前,我已经设置好了。
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;
这会将每个空值替换为第一个非空值,但一旦遇到下一个非空值就不会停止。这导致我得到这样的结果:
---------Col_2-----------
Value 1
Value 1
Value 1
Value 2
Value 1
Value 1
-------------------------
有没有办法在访问中添加某种“执行此操作直到”此语句?我知道你可以用 PHP 和其他语言运行 if, then 语句,但不确定如何在 access 或直接 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”,而是让事情自动发生。
【问题讨论】:
-
你需要一个
order by的字段来查找之前的非空值。没有,你怎么知道哪个更新到Value 1,哪个更新到Value 2? -
这就是为什么我试图找到一种更新方法,直到它达到下一个非空值。某种修改过的 SQL if then 语句,它将更新到下一个非空值,然后停止以便我可以创建另一个查询或读取该非空值并填充列的其余部分。
-
@sgeddes 可能想说的是:您首先需要一种告诉计算机的方法,根据什么标准您最终得到该列,以及您呈现它的方式。可能/希望这是基于一个或多个其他列。在简单的情况下,所有这些其他值对于所有行都是相同的,Col1 应该保持相同的值。如果标准值在不重叠的范围内,则应该仍然可行(即在 SQL 中)。如果实际上没有任何东西可以对它们进行排序,那么声明式解决方案是不可能的。
-
@Abecee 还有另一列我最初想用作标准,但我无法使其工作。第二列是与这些值匹配的帐号列表。我将更新原始帖子以反映我的意思。
-
@Jcmoney1010 --
col1的相同值是否始终具有相同的col2值?如果是这样,很容易为此编写一个update语句...如果存在多个值,你又回到了同样的问题,因为你没有一个列来定义要使用的值。
标签: sql sql-update ms-access-2010