x
+----+---------+-------+--------+---------+--------+
| 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 |
+----+---------+-------+--------+---------+--------+
Here above the data is grouped by person then their duties are listed :
I need a way to get the data to look like this using 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 |
+----+---------+-------+--------+---------+--------+
having a bit of trouble iterating over every row… dont mind if its plsql – sql prefered tho
Tried a few things… but it goes back to null after the 2nd row for each person
Advertisement
Answer
One method is lag(ignore nulls)
:
select coalesce(name, lag(name ignore nulls) over (order by id)),
. . .
from t;
This is fetching the previous non-NULL
value from the name
columns, where “previous” is based on the ordering of the id
column.