使用前一行值 oracle sql 填充 table 中的行
Populating rows in table with previous row value oracle sql
+----+---------+-------+--------+---------+--------+
| id | counter | name | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
| 1 | 1 | jake | | | |
| 2 | 0 | | clean | misc | 12k |
| 3 | 1 | james | | | |
| 4 | 0 | | clean | misc | 12k |
| 5 | 0 | | soap | misc | 12k |
| 6 | 0 | | shower | misc | 12k |
| 7 | 1 | john | | | |
| 8 | 0 | | dry | misc | 12k |
| 9 | 0 | | scrub | misc | 12k |
+----+---------+-------+--------+---------+--------+
以上数据按人员分组,然后列出他们的职责:
我需要一种使用 Oracle sql 使数据看起来像这样的方法:
+----+---------+-------+--------+---------+--------+
| id | counter | name | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
| 1 | 1 | jake | | | |
| 2 | 0 | jake | clean | misc | 12k |
| 3 | 1 | james | | | |
| 4 | 0 | james | clean | misc | 12k |
| 5 | 0 | james | soap | misc | 12k |
| 6 | 0 | james | shower | misc | 12k |
| 7 | 1 | john | | | |
| 8 | 0 | john | dry | misc | 12k |
| 9 | 0 | john | scrub | misc | 12k |
+----+---------+-------+--------+---------+--------+
遍历每一行有点麻烦...不介意它的 plsql - sql 更喜欢
尝试了一些东西...但是在每个人的第二行之后它会返回 null
一种方法是lag(ignore nulls)
:
select coalesce(name, lag(name ignore nulls) over (order by id)),
. . .
from t;
这是从 name
列中获取先前的非 NULL
值,其中“先前”基于 id
列的顺序。
+----+---------+-------+--------+---------+--------+
| id | counter | name | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
| 1 | 1 | jake | | | |
| 2 | 0 | | clean | misc | 12k |
| 3 | 1 | james | | | |
| 4 | 0 | | clean | misc | 12k |
| 5 | 0 | | soap | misc | 12k |
| 6 | 0 | | shower | misc | 12k |
| 7 | 1 | john | | | |
| 8 | 0 | | dry | misc | 12k |
| 9 | 0 | | scrub | misc | 12k |
+----+---------+-------+--------+---------+--------+
以上数据按人员分组,然后列出他们的职责:
我需要一种使用 Oracle sql 使数据看起来像这样的方法:
+----+---------+-------+--------+---------+--------+
| id | counter | name | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
| 1 | 1 | jake | | | |
| 2 | 0 | jake | clean | misc | 12k |
| 3 | 1 | james | | | |
| 4 | 0 | james | clean | misc | 12k |
| 5 | 0 | james | soap | misc | 12k |
| 6 | 0 | james | shower | misc | 12k |
| 7 | 1 | john | | | |
| 8 | 0 | john | dry | misc | 12k |
| 9 | 0 | john | scrub | misc | 12k |
+----+---------+-------+--------+---------+--------+
遍历每一行有点麻烦...不介意它的 plsql - sql 更喜欢
尝试了一些东西...但是在每个人的第二行之后它会返回 null
一种方法是lag(ignore nulls)
:
select coalesce(name, lag(name ignore nulls) over (order by id)),
. . .
from t;
这是从 name
列中获取先前的非 NULL
值,其中“先前”基于 id
列的顺序。