I have set of data which looks like below

I want to reduce the rows in it. If possible to reduce up to single row then it would be considered as best case.
Final data set should something like this

I tried Min and Max functions in SQL. But I don't want to loose any data. Just want to fill blank cells so that readability of report.
If anyone need sample data then you may use below query
select * from
(
SELECT 9999 as primary_key ,1 AS column_1, 2 as column_2, NULL as column_3, NULL as column_4 FROM DUAL
UNION ALL
SELECT 9999, NULL, NULL, 3, 4 FROM DUAL
UNION ALL
SELECT 9999, 5, 6, NULL, NULL FROM DUAL
)
I suggest working the current data into an "unpivoted state" that excludes NULL values and whilst doing this add a row number into the mix. Then once that is available then re-pivot that interim result into the wanted final format using both the primary_key and the row number:
fiddle
Note the arrangement of values into these rows is determined by the row_number() calculation. So there is no guarantee that values will re-align into the same rows that they originated from.