| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1109 人关注过本帖
标题:请教各位高人,怎样实现这个交叉统计表?
只看楼主 加入收藏
ynkm
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-6-23
收藏
 问题点数:0 回复次数:7 
请教各位高人,怎样实现这个交叉统计表?
有表jcxx如下
图片附件: 游客没有浏览图片的权限,请 登录注册

要用sql语句作如下的统计表
图片附件: 游客没有浏览图片的权限,请 登录注册

用sql语句怎样实现,
期盼中......
搜索更多相关主题的帖子: 统计表 高人 交叉 
2006-06-23 19:51
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
用动态语句组合加Rollup查询

[此贴子已经被作者于2006-6-23 20:19:43编辑过]



2006-06-23 20:19
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 

declare @a table
(
县名 varchar(10),
乡名 varchar(10),
村名 varchar(10),
权属 varchar(10),
地类 varchar(10),
面积 numeric(10,1)
)

insert into @a
select 'a','aa','aaa','集体','水田',776.7 union all
select 'a','aa','aaa','集体','旱地',856.3 union all
select 'a','aa','aaa','国有','林地',148.1 union all
select 'a','aa','aaa','集体','水域',920.8 union all
select 'a','aa','aaa','国有','建筑用地',607.9 union all
select 'a','aa','aab','集体','水田',911.1 union all
select 'a','aa','aab','集体','旱地',913.2 union all
select 'a','aa','aab','国有','林地',739.7 union all
select 'a','aa','aab','国有','建筑用地',105.4 union all
select 'a','ab','aba','集体','水田',550.9 union all
select 'a','ab','aba','集体','旱地',862.7 union all
select 'a','ab','aba','国有','林地',759.6 union all
select 'b','ba','baa','集体','水田',827.3 union all
select 'b','ba','baa','集体','旱地',293.1 union all
select 'a','ab','aba','集体','林地',226.5 union all
select 'b','ba','baa','国有','水域',381.6 union all
select 'b','ba','baa','国有','建筑用地',886.6 union all
select 'b','ba','bab','集体','水田',768.1 union all
select 'b','ba','bab','集体','旱地',623 union all
select 'b','ba','bab','国有','林地',931.7 union all
select 'b','ba','baa','集体','水域',921.5 union all
select 'b','bb','bba','集体','旱地',973.1 union all
select 'b','bb','bba','国有','林地',410.6 union all
select 'b','bb','bba','集体','水域',530.6 union all
select 'b','bb','bbb','集体','水田',298.2 union all
select 'b','bb','bbb','集体','旱地',148.5 union all
select 'b','bb','bbb','国有','林地',19.5 union all
select 'b','bb','bbb','集体','水域',169

select * from @a

select
case when 权属='国有' or 权属='集体' then '' else 统计单位 end as 统计单位,
权属,
cast(水田 as varchar(10)) as 水田,
cast(旱地 as varchar(10)) as 旱地,
cast(林地 as varchar(10)) as 林地,
cast(水域 as varchar(10)) as 水域,
cast(建筑用地 as varchar(10)) as 建筑用地
from
(
select
case
when grouping(村名)=1 then '合计'
else 村名 end as 统计单位,
isnull((case
when grouping(权属)=1 then 村名+'村计'
else 权属 end),'合计') as 权属,
sum(case 地类 when '水田' then 面积 else 0 end) as 水田,
sum(case 地类 when '旱地' then 面积 else 0 end) as 旱地,
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
@a
group by 村名,权属 with rollup
union
select
case
when grouping(乡名)=1 then '合计'
else 乡名 end as 统计单位1,
isnull((case
when grouping(权属)=1 then 乡名+'乡计'
else 权属 end),'合计') as 权属,
sum(case 地类 when '水田' then 面积 else 0 end) as 水田,
sum(case 地类 when '旱地' then 面积 else 0 end) as 旱地,
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
@a
group by 乡名,权属 with rollup
union
select
case
when grouping(县名)=1 then '合计'
else 县名 end as 统计单位,
isnull((case
when grouping(权属)=1 then 县名+'县计'
else 权属 end),'合计') as 权属,
sum(case 地类 when '水田' then 面积 else 0 end) as 水田,
sum(case 地类 when '旱地' then 面积 else 0 end) as 旱地,
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
@a
group by 县名,权属 with rollup
union
select
'合计' as 统计单位,
case when grouping(权属)=1 then '合计' else 权属 end as 权属,
sum(case 地类 when '水田' then 面积 else 0 end) as 水田,
sum(case 地类 when '旱地' then 面积 else 0 end) as 旱地,
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
@a
group by 权属 with rollup
)a
order by charindex(','+a.统计单位+',',',合计,a,aa,aaa,aab,ab,aba,b,ba,baa,bab,bb,bba,bbb,'),
charindex (a.权属,'集体 国有')

/*
县名 乡名 村名 权属 地类 面积
---------- ---------- ---------- ---------- ---------- ------------
a aa aaa 集体 水田 776.7
a aa aaa 集体 旱地 856.3
a aa aaa 国有 林地 148.1
a aa aaa 集体 水域 920.8
a aa aaa 国有 建筑用地 607.9
a aa aab 集体 水田 911.1
a aa aab 集体 旱地 913.2
a aa aab 国有 林地 739.7
a aa aab 国有 建筑用地 105.4
a ab aba 集体 水田 550.9
a ab aba 集体 旱地 862.7
a ab aba 国有 林地 759.6
b ba baa 集体 水田 827.3
b ba baa 集体 旱地 293.1
a ab aba 集体 林地 226.5
b ba baa 国有 水域 381.6
b ba baa 国有 建筑用地 886.6
b ba bab 集体 水田 768.1
b ba bab 集体 旱地 623.0
b ba bab 国有 林地 931.7
b ba baa 集体 水域 921.5
b bb bba 集体 旱地 973.1
b bb bba 国有 林地 410.6
b bb bba 集体 水域 530.6
b bb bbb 集体 水田 298.2
b bb bbb 集体 旱地 148.5
b bb bbb 国有 林地 19.5
b bb bbb 集体 水域 169.0

统计单位 权属 水田 旱地 林地 水域 建筑用地
---------- -------------- ---------- ---------- ---------- ---------- ----------
合计 合计 4132.3 4669.9 3235.7 2923.5 1599.9
集体 4132.3 4669.9 226.5 2541.9 0.0
国有 0.0 0.0 3009.2 381.6 1599.9
a a县计 2238.7 2632.2 1873.9 920.8 713.3
集体 2238.7 2632.2 226.5 920.8 0.0
国有 0.0 0.0 1647.4 0.0 713.3
aa aa乡计 1687.8 1769.5 887.8 920.8 713.3
集体 1687.8 1769.5 0.0 920.8 0.0
国有 0.0 0.0 887.8 0.0 713.3
aaa aaa村计 776.7 856.3 148.1 920.8 607.9
集体 776.7 856.3 0.0 920.8 0.0
国有 0.0 0.0 148.1 0.0 607.9
aab aab村计 911.1 913.2 739.7 0.0 105.4
集体 911.1 913.2 0.0 0.0 0.0
国有 0.0 0.0 739.7 0.0 105.4
ab ab乡计 550.9 862.7 986.1 0.0 0.0
集体 550.9 862.7 226.5 0.0 0.0
国有 0.0 0.0 759.6 0.0 0.0
aba aba村计 550.9 862.7 986.1 0.0 0.0
集体 550.9 862.7 226.5 0.0 0.0
国有 0.0 0.0 759.6 0.0 0.0
b b县计 1893.6 2037.7 1361.8 2002.7 886.6
集体 1893.6 2037.7 0.0 1621.1 0.0
国有 0.0 0.0 1361.8 381.6 886.6
ba ba乡计 1595.4 916.1 931.7 1303.1 886.6
集体 1595.4 916.1 0.0 921.5 0.0
国有 0.0 0.0 931.7 381.6 886.6
baa baa村计 827.3 293.1 0.0 1303.1 886.6
集体 827.3 293.1 0.0 921.5 0.0
国有 0.0 0.0 0.0 381.6 886.6
bab bab村计 768.1 623.0 931.7 0.0 0.0
集体 768.1 623.0 0.0 0.0 0.0
国有 0.0 0.0 931.7 0.0 0.0
bb bb乡计 298.2 1121.6 430.1 699.6 0.0
集体 298.2 1121.6 0.0 699.6 0.0
国有 0.0 0.0 430.1 0.0 0.0
bba bba村计 0.0 973.1 410.6 530.6 0.0
集体 0.0 973.1 0.0 530.6 0.0
国有 0.0 0.0 410.6 0.0 0.0
bbb bbb村计 298.2 148.5 19.5 169.0 0.0
集体 298.2 148.5 0.0 169.0 0.0
国有 0.0 0.0 19.5 0.0 0.0

*/

[此贴子已经被作者于2006-6-23 23:28:11编辑过]


2006-06-23 23:02
ynkm
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-6-23
收藏
得分:0 
谢谢版主,您真是太伟大了!帮了比较菜的我一个大忙.再次感谢版主.



-------------------------------------------------------------
请问版主,能把一些传统的中国式交叉统计表的实现方法做一个系统的总结吗?

2006-06-25 16:08
ynkm
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-6-23
收藏
得分:0 
谢谢等级为版主的"LouisXIV",您真是太伟大了!帮了比较菜的我一个大忙.再次感谢"LouisXIV".

请问"LouisXIV",能把一些传统的中国式交叉统计表的实现方法做一个系统的总结吗?

2006-06-25 16:20
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
你所谓的中国式交叉统计表

在Excel中被称为“数据透视表”

在Sql中可以通过Case语句来达成

分类的汇总可以用RollUp

上面的语句也不过用到了Case,RollUp,Union和Charindex4种语法而已。

你自己分析一下就知道了

2006-06-25 17:22
liutong606
Rank: 1
等 级:新手上路
帖 子:34
专家分:7
注 册:2006-6-24
收藏
得分:0 
   支持版主   要是都像版主这么热心就好了  嘎嘎

2006-06-26 14:43
ynkm
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-6-23
收藏
得分:0 

2006-07-02 09:37
快速回复:请教各位高人,怎样实现这个交叉统计表?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013708 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved