我有一个表,数据看起来像这样,我想填写日期,例如:- 1-5应该有日期2/8/2012,6-9应该有日期:- 8-Feb
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发布于 2013-03-12 14:39:38
如下所示:
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;查看Fiddle here
发布于 2013-03-12 14:45:11
请尝试使用合并:
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-12 14:43:06
您可以尝试这样做,假设您是在对第一列进行排序:(注意:我不熟悉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;这显然是未经测试的,所以如果有帮助,请让我知道!
https://stackoverflow.com/questions/15354287
复制相似问题