更新从同一列获取数据的列
我有一个表格和数据看起来像这样我想填写日期例如:-1-5应该有日期2012年2月8日和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
感谢。
事情是这样的:
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-12 06:57:22
你可以尝试做这样的事情,假设你正在排序的第一列: (注:我不熟悉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-12 09:28:21
没问题!我以前从未使用过nvl,所以我也学到了一些东西。 – crazylpfan 2013-03-12 20:36:25
请尝试使用合并:
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)
不无某种排序顺序。你怎么知道2-5跟1? – paxdiablo 2013-03-12 06:00:08
什么是第一列的类型,应该是VARCHAR,然后你可以使用dateformat来施放相同的命令,但是这个命令依赖于你正在使用的SQL引擎。共享服务器名称(mysql或oracle等)。 – 2013-03-12 06:01:08
我使用的Oracle和1,2和3列的数据类型是Int,varchar(),varchar()。如果需要,我可以更改数据类型。 – 2013-03-12 06:11:30