高手请进!一个SQL语句的统计问题!!!

zsh168 2005-09-20 04:48:45
表结构和数据如下:
(说明下面数据可能有空值,行业为空的话,统计显示为“未知行业”)
select t.name,t.content,t.region,t.memo,t.no from aatest t
名称 数量 行业 说明 编号
/*-------------------------------------------------*/
name content region memo no
电厂1 11 电子 a 001
电厂2 22 电子 b 002
化工厂1 33 化工 c 003
化工厂2 44 化工 d 004
电厂3 55 电子 e 005
化工厂3 66 化工 f 006
钢铁1 10 g 007
20 h 008
/*--------------------------------------------------*/
现在想显示成如下结果:
序号 名称 数量 说明 编号
name content memo no
1 电厂1 11 a 001
2 电厂2 22 b 002
3 电厂3 55 e 005
小计 电子 88
1 化工厂1 33 c 003
2 化工厂2 44 d 004
3 化工厂3 66 f 006
小计 化工 143
1 钢铁1 10 g 007
2 20 h 008
小计 未知行业 30
总计 所有行业 261

请各位老大看看这个SQL怎么写?


...全文
116 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xusup 2005-09-21
学习了一下GROUP
回复
zsh168 2005-09-20
楼上的大哥真是太感激了。还想问一个问题:(0, 15, 31)
中的0, 15, 31这个数字代表什么呢?是怎么算出来的呢?
回复
子林 2005-09-20
SQL> select decode(grouping_id(region, ids, no, name,memo), 0, to_char(ids), 15, '小计', 31, '总计')
ids,
2 no,
3 decode(grouping_id(region, ids, no, name,memo), 15, nvl(region,'未知行业'), 31, '所有行
业', name) name,
4 sum(content),
5 memo
6 from (select t.*,row_number() over(partition by region order by no) ids from t)
7 group by rollup(region, ids, no, name,memo)
8 having grouping_id(region, ids, no, name,memo) in (0, 15, 31);

IDS NO NAME SUM(CONTENT) MEMO
-------------------- --- -------------------- ------------ --------------------
1 007 钢铁1 10 g
2 008 20 h
小计 未知行业 30
1 001 电子公司1 11 a
2 002 电子公司2 22 b
3 005 电厂3 55 e
小计 电子 88
1 003 化工厂1 33 c
2 004 化工厂2 44 d
3 006 化工厂3 66 f
小计 化工 143
总计 所有行业 261

已选择12行。
回复
zsh168 2005-09-20
谢谢楼上的大哥了,
有没有办法能显示成如下格式呢?
NO NAME SUM(CONTENT) MEMO
---- -------------------- ------------ --------------------
1 007 钢铁1 77 g
2 008 88 h
小计 未知行业 165
1 001 电厂1 11 a
2 002 电厂2 22 b
3 005 电厂3 55 e
小计 电子 88
1 003 化工厂1 33 c
2 004 化工厂2 44 d
3 006 化工厂3 66 f
小计 化工 143
总计 所有行业 396

就是在显示的结果的时候在前面加上一列
回复
子林 2005-09-20
SQL> select decode(grouping_id(region, no, name,memo), 0, no, 7, '小计', 15, '总计') no,
2 decode(grouping_id(region, no, name,memo), 7, nvl(region,'未知行业'), 15, '所有行业', na
me) name,
3 sum(content),
4 memo
5 from t
6 group by rollup(region, no, name,memo)
7 having grouping_id(region, no, name,memo) in (0, 7, 15);

NO NAME SUM(CONTENT) MEMO
---- -------------------- ------------ --------------------
007 钢铁1 10 g
008 20 h
小计 未知行业 30
001 电子公司1 11 a
002 电子公司2 22 b
005 电厂3 55 e
小计 电子 88
003 化工厂1 33 c
004 化工厂2 44 d
006 化工厂3 66 f
小计 化工 143

NO NAME SUM(CONTENT) MEMO
---- -------------------- ------------ --------------------
总计 所有行业 261

已选择12行。
回复
相关推荐
发帖
基础和管理
创建于2007-09-28

1.7w+

社区成员

Oracle 基础和管理
申请成为版主
帖子事件
创建了帖子
2005-09-20 04:48
社区公告
暂无公告