樣表如下,查詢出比如6條資料,但中間有空的想實作當欄位為空時顯示上一個不空的值
欄位 想實作樣式 欄位
A A
A A
A
B B
B
B
C C
uj5u.com熱心網友回復:
lag、lead 這兩個函式,正好滿足你的需求。uj5u.com熱心網友回復:
lag、lead 這兩個函式可以獲取上一潭訓者下一條資料的值,但是您的這個需求,因為有連續的空值出現,應該不適用。首先,上一條肯定不能是隨機的,要有一個排序欄位,比如某個時間。
我覺得大概的思路應該這樣。
WITH
T1 AS (SELECT 獲取的欄位 FROM 表名 ORDER BY 排序欄位),
T2 AS (SELECT ROWNUM N,獲取的欄位 FROM T1)
SELECT NVL(獲取的欄位,(SELECT TT.獲取的欄位 FROM T2 TT WHERE TT.N<=T.N AND TT.獲取的欄位 IS NOT NULL AND ROWNUM =1)) FROM T2 T
uj5u.com熱心網友回復:
樓上的不要抬杠,lag 或 lead (欄位 ignore nulls),是可以實作的。
來個簡單的例子
SQL> create table t1(id int primary key, name varchar(10));
Table created
SQL> begin
2 insert into t1 values(1, 'A');
3 insert into t1 values(2, null);
4 insert into t1 values(3, null);
5 insert into t1 values(4, 'B');
6 insert into t1 values(5, null);
7 insert into t1 values(6, null);
8 insert into t1 values(7, null);
9 insert into t1 values(8, 'D');
10 insert into t1 values(9, 'G');
11 end;
12 /
PL/SQL procedure successfully completed
SQL> select id, name, nvl(name, lag(name ignore nulls) over(order by id)) xa
2 from t1;
ID NAME XA
----- ---------- ----------
1 A A
2 A
3 A
4 B B
5 B
6 B
7 B
8 D D
9 G G
9 rows selected
SQL> drop table t1 purge;
Table dropped
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/203799.html
標籤:開發
