很简单啊 你把你rollup的语句我们假设为x,第一个字段也就是总计那列的字段假设为col 举例: select * from (x) t order by decode(col,'总计',0,1)
group by rollup() 结合grouping()来使用即可
我的开发语句是这样的: select nvl(d.col1,'总计'), case when d.col1 is null then '总计' else nvl(d.col2,'小计')end, sum(d.col3) from tablea d group by rollup(d.col1,d.col2);我用group by rollup()和grouping()结合使用貌似不给力啊。给明确点吗?谢谢各位了。
用geniuswjt的办法不能完全满足,如果我有‘小计’‘合计’‘总计’,那该怎么弄呢? select nvl(d.col1,'总计'), case when d.col1 is null then '总计' else nvl(d.col2,'合计')end, case when d.col1 is null then '总计' when d.col2 then '合计' else nvl(d.col3,'小计')end, sum(d.col4) from tablea d group by rollup(d.col1,d.col2,d.col3);
是说我的一个SQL中实现了‘小计’‘合计’‘总计’,现在‘小计’‘合计’任然按规定显示,只需要把‘总计’那一行提到第一行显示,而不是简单的做汉字替换 select nvl(d.col1,'总计'), case when d.col1 is null then '总计' else nvl(d.col2,'合计')end, case when d.col1 is null then '总计' when d.col2 then '合计' else nvl(d.col3,'小计')end, sum(d.col4) from tablea d group by rollup(d.col1,d.col2,d.col3) order by decode(d.col1,'总计',0,1); 这个可以实现‘总计’显示到第一行,但是其他维度会不按规则显示的。 不知道现在我描述清楚了没?;
--按两个字段分组统计行数,总计放第一行 select case when grouping(indcode) = 1 and grouping(varcode) = 1 then '总计' when grouping(indcode) = 0 and grouping(varcode) = 1 then '小计' else '' end as 说明, indCode, varCode, count(indValue) as 行统计 from hi_datavalue group by cube(indCode,varcode)--结果 --表头:说明 indCode varCode 行统计 1 总计 450223 2 VAR00000110 31903 3 VAR00000179 69720 4 VAR00000180 69720 5 VAR00000181 69720 6 VAR00000182 69720 7 VAR00000183 69720 8 VAR00000184 69720 9 小计 I00000202 31903 10 I00000202 VAR00000110 31903 11 小计 I00000246 139440 12 I00000246 VAR00000179 69720 13 I00000246 VAR00000180 69720 14 小计 I00000247 139440 15 I00000247 VAR00000181 69720 16 I00000247 VAR00000182 69720 17 小计 I00000248 139440 18 I00000248 VAR00000183 69720 19 I00000248 VAR00000184 69720
你把你rollup的语句我们假设为x,第一个字段也就是总计那列的字段假设为col
举例:
select * from (x) t
order by decode(col,'总计',0,1)
结合grouping()来使用即可
select nvl(d.col1,'总计'),
case when d.col1 is null then '总计' else nvl(d.col2,'小计')end,
sum(d.col3)
from tablea d
group by rollup(d.col1,d.col2);我用group by rollup()和grouping()结合使用貌似不给力啊。给明确点吗?谢谢各位了。
select nvl(d.col1,'总计'),
case when d.col1 is null then '总计' else nvl(d.col2,'合计')end,
case when d.col1 is null then '总计'
when d.col2 then '合计' else nvl(d.col3,'小计')end,
sum(d.col4)
from tablea d
group by rollup(d.col1,d.col2,d.col3);
select nvl(d.col1,'总计'),
case when d.col1 is null then '总计' else nvl(d.col2,'合计')end,
case when d.col1 is null then '总计'
when d.col2 then '合计' else nvl(d.col3,'小计')end,
sum(d.col4)
from tablea d
group by rollup(d.col1,d.col2,d.col3)
order by decode(d.col1,'总计',0,1);
这个可以实现‘总计’显示到第一行,但是其他维度会不按规则显示的。
不知道现在我描述清楚了没?;
select case
when grouping(indcode) = 1 and grouping(varcode) = 1 then
'总计'
when grouping(indcode) = 0 and grouping(varcode) = 1 then
'小计'
else
''
end as 说明,
indCode,
varCode,
count(indValue) as 行统计
from hi_datavalue
group by cube(indCode,varcode)--结果
--表头:说明 indCode varCode 行统计
1 总计 450223
2 VAR00000110 31903
3 VAR00000179 69720
4 VAR00000180 69720
5 VAR00000181 69720
6 VAR00000182 69720
7 VAR00000183 69720
8 VAR00000184 69720
9 小计 I00000202 31903
10 I00000202 VAR00000110 31903
11 小计 I00000246 139440
12 I00000246 VAR00000179 69720
13 I00000246 VAR00000180 69720
14 小计 I00000247 139440
15 I00000247 VAR00000181 69720
16 I00000247 VAR00000182 69720
17 小计 I00000248 139440
18 I00000248 VAR00000183 69720
19 I00000248 VAR00000184 69720