递归sql查询完整科目名称

已知表

科目编号 科目名称
1001 1001 现金
1002 1002 银行存款
10020100 0100 工商银行存款
100201000001 0001 工行重庆路支行
10020200 0200 建设银行存款
100202000001 0001 建行铁北支行

需要整理成

科目编号 科目称 科目全称

1001 现金 现金

1002 银行存款 银行存款

10020100 工商银行存款 银行存款-工商银行存款

100201000001 工行重庆路支行 银行存款-工商银行存款-工行重庆路支行

10020200 建设银行存款 银行存款-建设银行存款

100202000001 建行铁北支行 银行存款-建设银行存款-建行铁北支行

10020300 锦州银行存款 银行存款-锦州银行存款

100203000001 锦州银行石化支行 银行存款-锦州银行存款-锦州银行石化支行

100203000002 锦州银行铁北支行 银行存款-锦州银行存款-锦州银行铁北支行

100203000003 锦州银行石化广场支行 银行存款-锦州银行存款-锦州银行石化广场支行

10020400 昆仑银行 银行存款-昆仑

create temp table cc as

select substr(科目编号,1,(length(科目编号)-4)) 父,科目编号 子,科目名称 名称,科目编号 编号 from 转换成父子结构求科目全称;

select rowid,* from cc;

create temp table aa as

with recursive under_alice( root,父,子,完整路径,level,名称,编号完整路径,名称完整路径) as (select 子 root,’’ 父,子,子 完整路径,0 level,名称,编号 编号完整路径,名称 名称完整路径 from cc where 父 is null or 父 like ‘’ union all select under_alice.root,x.父,x.子,under_alice.完整路径||’-’||x.子,under_alice.level+1,x.名称,under_alice.编号完整路径||’-’||x.编号 编号完整路径,under_alice.名称完整路径||’-’||x.名称 名称完整路径 from cc x join under_alice on x.父=under_alice.子 order by 2)

select 子 科目编号,名称 科目称,名称完整路径 科目全称 from under_alice order by cast(子 as text);

select rowid,* from aa;

递归sql查询完整科目名称_第1张图片

递归sql查询完整科目名称_第2张图片

你可能感兴趣的:(笔记,工具,解决方案,sql,excel,数据库)