请教一个稍微复杂的查询,在线等
Num森林类别权属经营等级林种面积
1用材林122221.4
2薪炭林1132332
3经济林334677
4用材林2232332.7
5用材林123544
6薪炭林1126788
以上的表,想得到:
Num权属经营等级 总面积合计 用材林合计 薪炭林合计 经济林合计
111。。。。。。。。
112。。
即,按照权属和经营等级分组,统计面积合计项目
如何写代码?
如果是access,代码是否有所不同?
[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go
create table tb(Num int,森林类别 varchar(10),权属 varchar(10),经营等级 varchar(10),林种 varchar(10),面积 decimal(18,2))
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(1, '用材林 ', '1 ', '2 ', '2 ',221.4)
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(2, '薪炭林 ', '1 ', '1 ', '3 ',2332)
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(3, '经济林 ', '3 ', '3 ', '4 ',677)
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(4, '用材林 ', '2 ', '2 ', '3 ',2332.7)
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(5, '用材林 ', '1 ', '2 ', '3 ',544)
insert into tb(Num,森林类别,权属,经营等级,林种,面积) values(6, '薪炭林 ', '1 ', '1 ', '2 ',6788)
select 权属,经营等级,
sum(面积) '总面积合计 ',
sum(case when 森林类别 = '用材林 ' then 面积 else 0 end) as '用材林合计 ',
sum(case when 森林类别 = '薪炭林 ' then 面积 else 0 end) as '薪炭林合计 ',
sum(case when 森林类别 = '经济林 ' then 面积 else 0 end) as '经济林合计 '
from tb
group by 权属,经营等级
drop table tb
/*
权属 经营等级 总面积合计 用材林合计 薪炭林合计 经济林合计
---------- ---------- ---------- ---------- ---------- ----------
1 1 9120.00 .00 9120.00 .00
1 2 765.40 765.40 .00 .00
2 2 2332.70 2332.70 .00 .00
3 3 677.00 .00 .00 677.00
(所影响的行数为 4 行)
*/
[解决办法]
select Num=min(Num)权属=min(权属),,经营等级,总面积合计=sum(面积),
用材林合计=sum(case when 森林类别 = '用材林 ' then 面积 else 0 end),
薪炭林合计=sum(case when 森林类别 = '薪炭林 ' then 面积 else 0 end),
经济林合计=sum(case when 森林类别 = '经济林 ' then 面积 else 0 end)
from tablename
group by 经营等级