with
base (key, a1, a2, a3, a4, a5, a6, a7, a8, a9, a0) as (
values
(1, '00', '01', '00', '09', '08', '05', '00', '02', '06', '03'),
(2, '08', '02', '00', '06', '01', '02', '00', '04', '03', '09')
),
ordered (k, value, seq) as (
select
key,value,rownumber() over(partition by key order by nullif(value,'00')) seq
from base cross
join lateral (values a1,a2,a3,a4,a5,a6,a7,a8,a9,a0) v(value)
)
select
key,
(select value from ordered o where (k, seq) = (key, 1)) A1,
(select value from ordered o where (k, seq) = (key, 2)) A2,
(select value from ordered o where (k, seq) = (key, 3)) A3,
(select value from ordered o where (k, seq) = (key, 4)) A4,
(select value from ordered o where (k, seq) = (key, 5)) A5,
(select value from ordered o where (k, seq) = (key, 6)) A6,
(select value from ordered o where (k, seq) = (key, 7)) A7,
(select value from ordered o where (k, seq) = (key, 8)) A8,
(select value from ordered o where (k, seq) = (key, 9)) A9,
(select value from ordered o where (k, seq) = (key, 10)) A0
from base