有2张表结构如下: 部门代码表(bmdm): 部门代码 部门名称
0100 销售科
0101 销售科一部
0102 销售科二部
0200 市场科
0201 市场科一部
0203 市场科三部
销售表(xs): 部门代码 销售金额
0100 100
0101 80
0102 30
0200 110
0201 60
0203 70
需要实现的结果表:(显示按部门分类汇总和明细数据,如:销售科=本身+销售一部+二部数据)
部门名称 销售金额
销售科 210
销售科一部 80
销售科二部 30
市场科 240
市场科一部 60
市场科三部 70 不用中间表,用sql语句如何实现?
0100 销售科
0101 销售科一部
0102 销售科二部
0200 市场科
0201 市场科一部
0203 市场科三部
销售表(xs): 部门代码 销售金额
0100 100
0101 80
0102 30
0200 110
0201 60
0203 70
需要实现的结果表:(显示按部门分类汇总和明细数据,如:销售科=本身+销售一部+二部数据)
部门名称 销售金额
销售科 210
销售科一部 80
销售科二部 30
市场科 240
市场科一部 60
市场科三部 70 不用中间表,用sql语句如何实现?
销售科一部做外查询,直接group by名称sum即可。
其他科与部门类似……一个select搞定
---- --------------------
0100 销售科
0101 销售科一部
0102 销售科二部
0200 市场科
0201 市场科一部
0202 市场科二部已选择6行。SQL> select * from xs;ACOD AMONEY
---- ----------
0100 100
0101 80
0102 30
0200 110
0201 60
0202 70已选择6行。SQL> select a.acode,nvl(b.amoney,a.amoney),c.aname
2 from xs a
3 left join
4 (select substr(acode,1,2) acode,sum(amoney) amoney
5 from xs
6 group by substr(acode,1,2) ) b
7 on a.acode = b.acode||'00'
8 left join bmdm c
9 on a.acode=c.acode;ACOD NVL(B.AMONEY,A.AMONEY) ANAME
---- ---------------------- --------------------
0100 210 销售科
0101 80 销售科一部
0102 30 销售科二部
0200 240 市场科
0201 60 市场科一部
0202 70 市场科二部已选择6行。