表结构
inst_no inst_lvl sup_inst_no bal
0000 1 0000 null
0001 2 0000 null
000101 3 0001 null
000102 4 000101 200
实现的查询结果:
inst_no inst_lvl sup_inst_no bal
0000 1 0000 200
0001 2 0000 200
000101 3 0001 200
000102 4 000101 200
请问大侠,用sql改怎么实现?
inst_no inst_lvl sup_inst_no bal
0000 1 0000 null
0001 2 0000 null
000101 3 0001 null
000102 4 000101 200
实现的查询结果:
inst_no inst_lvl sup_inst_no bal
0000 1 0000 200
0001 2 0000 200
000101 3 0001 200
000102 4 000101 200
请问大侠,用sql改怎么实现?
SELECT a.inst_no,
a.inst_lvl,
a.sup_inst_no,
(SELECT SUM(b.bal)
FROM tt b
START WITH b.inst_no = a.inst_no
CONNECT BY PRIOR b.inst_no = b.sup_inst_no) bal
FROM tt a;
cm_inst:机构表,inst_no inst_name sup_inst_no inst_lvlb_s_gla_sum:汇总表 inst_no ,bal
想实现的功能就是逐级往上层汇总数据
0000 1 0000 null
0001 2 0000 null
0002 2 0000 null
000101 3 0001 null
000102 4 000101 200
000201 3 0002 100
实现的查询结果:
inst_no inst_lvl sup_inst_no bal
0000 1 0000 300
0001 2 0000 200
0002 2 0000 100
000101 3 0001 200
000102 4 000101 200希望各位大侠帮忙咯
0000 1 0000 null
0001 2 0000 null
0002 2 0000 null
000101 3 0001 null
000102 4 000101 200
000201 3 0002 100
实现的查询结果:
inst_no inst_lvl sup_inst_no bal
0000 1 0000 300
0001 2 0000 200
0002 2 0000 100
000101 3 0001 200
000102 4 000101 200
000201 3 0002 100
希望各位大侠帮忙咯
--汇总的关键就是start with ... connct by ..实现树型结构的的语句
--另外汇总的一行也可以使用group by rollup来生成
WITH c AS(
SELECT a.inst_no,
a.inst_lvl,
a.sup_inst_no,
(SELECT SUM(b.bal)
FROM tt b
START WITH b.inst_no = a.inst_no
CONNECT BY PRIOR b.inst_no = b.sup_inst_no) bal
FROM tt a where a.inst_no <> '0000')
SELECT inst_no,
inst_lvl,
sup_inst_no,
(SELECT SUM(bal) FROM c WHERE c.sup_inst_no = '0000') bal
FROM tt
WHERE tt.inst_no = '0000'
UNION ALL
SELECT * FROM c;oracle 树型查询