SQL分类汇总,行和列统计汇总

通过表
县 森林类别 乔木林面积 灌木林面积
长沙市 地方公益林地 1.4959 0.8806
长沙市 国家级二级公益林地 2.1724 8.0384
长沙市 国家级三级公益林地 0 0
长沙市 一般商品林地 11.6623 4.2785
长沙市 重点商品林 3.6524 2.3658

得到以后汇总表

县 森林类别 合计 乔木林面积 灌木林面积
长沙市 地方公益林地 2.3765 1.4959 0.8806
长沙市 国家级二级公益林地 10.2108 2.1724 8.0384
长沙市 国家级三级公益林地 0.8577 0.5212 0.3365
公益林地 13.445 4.1895 9.2555
长沙市 一般商品林地 15.9408 11.6623 4.2785
长沙市 重点商品林地 6.0182 3.6524 2.3658
商品林地 21.959 15.3147 6.6443

https://blog.csdn.net/enpterexpress/article/details/47736419

select 县 森林类别 乔木林面积+灌木林面积 乔木林面积 灌木林面积 from 表;
select 公益林地 乔木林面积+灌木林面积 乔木林面积 灌木林面积 from 表 where 森林类别 like "%公益林地%";
select 商品林地 乔木林面积+灌木林面积 乔木林面积 灌木林面积 from 表 where 森林类别 like "%商品林地%";
我的理解是这样的,没有测试。有错误还望指出

select 县 森林类别 sum(面积) 乔木林面积 灌木林面积 from 表 group by order by .

现有姓名列,时间列。要求统计出所有性名列中一样的名字并且汇总相加,条件为在一定时间段内。
例:表名:TABLE
xingming shijian
A 2010-5-15
B 2010-5-16
A 2010-5-16
D 2010-5-17
我的代码是这样写的
select xingming,count(xingming)as ry,shijian
from table
where shijian>='2010-5-15'and shijian<='2010-5-16'
group by xingming,shijian
结果为
xingming ry shijian
A 1 2010-5-15
A 1 2010-5-16
B 1 2010-5-16
我想要的结果是
xingming ry shijian
A 2 2010-5-15
B 1 2010-5-16

县 森林类别 合计 乔木林面积 灌木林面积
长沙市 地方公益林地 2.3765 1.4959 0.8806
长沙市 国家级二级公益林地 10.2108 2.1724 8.0384
长沙市 国家级三级公益林地 0.8577 0.5212 0.3365
select 县,森林类别,(乔木林面积+灌木林面积) as 合计,乔木林面积,灌木林面积 from 表 where 森林类别=地方公益林地 or 森林类别=国家级二级公益林地 or 森林类别=国家级三级公益林地

公益林地 13.445 4.1895 9.2555
select sum(合计),sum(乔木林面积),sum(灌木林面积) from
(select 县,森林类别,(乔木林面积+灌木林面积) as 合计,乔木林面积,灌木林面积 from 表 where 森林类别=地方公益林地 or 森林类别=国家级二级公益林地 or 森林类别=国家级三级公益林地)

县 森林类别 合计 乔木林面积 灌木林面积
长沙市 一般商品林地 15.9408 11.6623 4.2785
长沙市 重点商品林地 6.0182 3.6524 2.3658
select 县,森林类别,(乔木林面积+灌木林面积) as 合计,乔木林面积,灌木林面积 from 表 where 森林类别=一般商品林地 or 森林类别=重点商品林地

商品林地 21.959 15.3147 6.6443
select sum(合计),sum(乔木林面积),sum(灌木林面积)
from (select 县,森林类别,(乔木林面积+灌木林面积) as 合计,乔木林面积,灌木林面积 from 表 where 森林类别=一般商品林地 or 森林类别=重点商品林地)

create table tmp_aaa(县 varchar2(30),森林类别 varchar2(100),乔木林面积 number,灌木林面积 number,type number);
select a.*,rowid from tmp_aaa a;

update tmp_aaa a set a.type=1
where a.森林类别 like '%公益林地%';
commit;
update tmp_aaa a set a.type=2
where a.森林类别 like '%商品林地%';
commit;

select * from
(select a.县,case when a.type=1 and a.森林类别 is null then '公益林地'
when a.type=2 and a.森林类别 is null then '商品林地' else a.森林类别 end 森林类别,
sum(a.乔木林面积+a.灌木林面积),sum(a.乔木林面积),sum(a.灌木林面积)
from tmp_aaa a
group by a.县,type,cube(a.森林类别))a
order by decode(a.森林类别,'地方公益林地',1,'国家级二级公益林地',2,'国家级三级公益林地',3
,'公益林地',4,'一般商品林地',5,'重点商品林地',6,'商品林地',7);

CREATE TABLE #Temp --县 森林类别 乔木林面积 灌木林面积
(
id int,
county nvarchar(50),
type nvarchar(50),
jolinlinarea decimal(18,10),
shrubberyarea decimal(18,10)
)

INSERT INTO #Temp VALUES
(1,'长沙市','地方公益林地',1.4959 ,0.8806),
(2,'长沙市','国家级二级公益林地',2.1724,8.0384),
(3,'长沙市','国家级三级公益林地',0,0),
(4,'长沙市','一般商品林地',11.6623,4.2785),
(5,'长沙市','重点商品林地',3.6524,2.3658)

select * from
(
select 1 as orderby,county,type,(jolinlinarea+jolinlinarea) as total,jolinlinarea,shrubberyarea from #Temp
union all
select null as orderby,county,RIGHT(type,4), sum(jolinlinarea+jolinlinarea) as total,sum(jolinlinarea) as jolinlinarea,sum(shrubberyarea) as shrubberyarea from #Temp
group by county,RIGHT(type,4)
)temp0
order by RIGHT(type,4),orderby desc