Something along these lines, perhaps: ``` with recursive DirLevels as ( select rowid, 0 Level, substr(PathFileName, 1, instr(PathFileName||'\', '\')-1) DirName, substr(PathFileName, instr(PathFileName, '\') + 1) Tail from T1 union all select rowid, Level+1, substr(Tail, 1, instr(Tail||'\', '\')-1) DirName, case when instr(Tail, '\') then substr(Tail, instr(Tail, '\') + 1) else '' end from DirLevels where Tail != '' ) select rowid, max(case level when 0 then DirName end) DirLev1, max(case level when 1 then DirName end) DirLev2, max(case level when 2 then DirName end) DirLev3, max(case level when 3 then DirName end) DirLev4, max(case level when 4 then DirName end) DirLev5, max(case level when 5 then DirName end) DirLev6 from DirLevels group by rowid; ```