CREATE TABLE jax_t1(
f1 VARCHAR2(10),
f2 VARCHAR2(10),
f3 VARCHAR2(10));INSERT INTO jax_t1 values(1,分类1,1);
INSERT INTO jax_t1 values(1,分类2,1);
INSERT INTO jax_t1 values(2,分类1,1);
INSERT INTO jax_t1 values(2,分类2,1);
COMMIT;SELECT * FROM jax_t1;
--------------------------
序号 f1 f2 f3
1 1 分类1 1
2 1 分类2 1
3 2 分类1 1
4 2 分类2 1
在上面内容中,按照f2的分类,我想获得分类1的明细和两种分类的汇总结果如下序号 f1 f2 f3
1 1 分类1 1
2 1 所有 2
3 2 分类1 1
4 2 所有 2
f1 VARCHAR2(10),
f2 VARCHAR2(10),
f3 VARCHAR2(10));INSERT INTO jax_t1 values(1,分类1,1);
INSERT INTO jax_t1 values(1,分类2,1);
INSERT INTO jax_t1 values(2,分类1,1);
INSERT INTO jax_t1 values(2,分类2,1);
COMMIT;SELECT * FROM jax_t1;
--------------------------
序号 f1 f2 f3
1 1 分类1 1
2 1 分类2 1
3 2 分类1 1
4 2 分类2 1
在上面内容中,按照f2的分类,我想获得分类1的明细和两种分类的汇总结果如下序号 f1 f2 f3
1 1 分类1 1
2 1 所有 2
3 2 分类1 1
4 2 所有 2
select f1,f2,f3 from jax_t1 where f2 = '分类1'
union all
select f1,'所有',sum(f3) from jax_t1 group by f1,'所有'
union all 就搞定了..
用别的话..很麻烦..下面是我自己写的..
但是不管多少个分类..分类多的时候适用..
select f1,
case
when rn = 2 then
'所有'
else
f2
end f2,
f3
from (select decode(f1, '所有', 1, f1) f1,
f2,
f3,
row_number() over(partition by f2 order by f1) rn
from (select f1, f2, f3, rownum rn1
from (select nvl(f1, '所有') f1,
f2,
sum(f3) f3,
row_number() over(partition by f2 order by f1) rn
from jax_t1
group by rollup(f2, f1))
where rn = 1
or f1 = '所有')
where rn1 < (select max(rn1)
from (select f1, f2, f3, rownum rn1
from (select nvl(f1, '所有') f1,
f2,
sum(f3) f3,
row_number() over(partition by f2 order by f1) rn
from jax_t1
group by rollup(f2, f1))
where rn = 1
or f1 = '所有')))
感觉自己写的很麻烦..不知道有没有更简单的写法..
from jax_t1
group by rollup(f1,f2,f3)就可以实现你上面的需求