0

我有一个表格,数据看起来像这样我想填写日期,例如:-1-5 应该有日期 2/8/2012 和 6-9 应该有日期:- 2 月 8 日

1   2/8/2012    G8-212
2   null            G8 711
3   null            G8-719
4   null            G8 331
5   null            G8 320
6   8-Feb           G8 172
7   null            G8 606
8   null            G8 176
9   null            G8 372

最终结果应该是这样的

1   2/8/2012    G8-212
2   2/8/2012    G8 711
3   2/8/2012    G8-719
4   2/8/2012    G8 331
5   2/8/2012    G8 320
6   8-Feb           G8 172
7   8-Feb           G8 606
8   8-Feb           G8 176
9   8-Feb           G8 372
4

3 回答 3

1

像这样的东西:

select 
  id, 
  nvl(date_column,last_value(date_column ignore nulls) over (order by id)) as date_col, 
  code
from your_table
order by id;

在这里看到一个小提琴

于 2013-03-12T06:39:37.723 回答
1

请尝试使用合并:

merge into YourTable a
using (
    SELECT ID,
    ColumnName,
    nvl(ColumnName,last_value(ColumnName ignore nulls) over (order by ID)) as ColumnName_A
  FROM YourTable 
  ) b
on  (a.ID = b.ID)
when matched then 
  update set a.ColumnName = NVL(b.ColumnName, b.ColumnName_A)
于 2013-03-12T06:45:11.187 回答
-1

你可以尝试做这样的事情,假设你在第一列排序:(注意:我不熟悉 Oracle/PLSQL 语法,所以对这些查询持保留态度。)

首先,您需要获取非空行的所有索引及其值:

SELECT col1, col2
FROM table1
WHERE col2 IS NOT NULL

现在,遍历此查询的结果并根据需要更新列:

DECLARE
     CURSOR v_cols IS
          SELECT col1, col2 FROM table1 WHERE col2 IS NOT NULL;
     Int previousIndex := 0;
BEGIN
     FOR v_col IN v_cols LOOP
          UPDATE col2
          SET col2 = v_col.col2
          WHERE col1 < v_col.col1 AND col1 > previousIndex;
          previousIndex := v_col.col1;
     END LOOP;
END;

这显然是未经测试的,所以让我知道它是否有帮助!

于 2013-03-12T06:43:06.233 回答