我有一个包含90列的表格,并且我希望使用该特定组的最前面记录中的值更新/插入Null列。
例如: 我必须使用前一条记录中的所有非空值更新 ID = 8 的空列(ID_PK Ascending)如果前面的记录为null,则为下一个前面的记录,依此类推。
对于 Grp2 ,同样更新 ID = 15 的记录,其中记录前面的那个组等等......
麻烦的是我要检查和更新大约90列。是否有任何特殊的方法,而不是挑出每一列并检查以前的记录值。
感谢您查看此问题。
以下是该表的子集
Group ID_PK TAX REASON DT TYPE FLG
===== ====== ==== ======= ======= ==== ===
Grp1 2 1 6/30/2013 SD N
Grp1 3 18813 1 MEM
Grp1 5 1 SDHC N
Grp1 8 NOR
Grp2 9 12713 3 5/20/2014 SDHC Y
Grp2 11 NOR N
Grp2 15 12713
答案 0 :(得分:0)
我没有oracle数据库实例来确认100%这是有效的,但你可能正在寻找的功能是滞后()
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions070.htm
您遇到的问题是,您需要延迟返回不同的行数,具体取决于在空值之前需要遍历的记录数。你可以编写一个很长的CASE语句,它可以工作,但是不是最佳的。但是,lag()将成为你想要的。
答案 1 :(得分:0)
SELECT last_name, hire_date, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK';
LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- --------- ---------- ----------
Khoo 18-MAY-95 3100 0
Tobias 24-JUL-97 2800 3100
Baida 24-DEC-97 2900 2800
Himuro 15-NOV-98 2600 2900
Colmenares 10-AUG-99 2500 2600
LAG是一种分析功能。它可以在没有自联接的情况下同时访问表的多个行。给定从查询返回的一系列行和光标的位置,LAG提供对该位置之前给定物理偏移处的行的访问。