逐月对比的交叉表处理

原创 2005年03月16日 08:52:00

/*--原帖地址:
http://community.csdn.net/Expert/topic/3841/3841808.xml?temp=.4308588
--*/

--测试数据
create table tb(year int,month int,No varchar(10),Name varchar(10),部门 varchar(10),工资 int)
insert tb select 2004,10,'A001','AAA','DDD',1000
union all select 2004,10,'B001','BBB','DDD',800
union all select 2004,11,'A001','AAA','DDD',1100
union all select 2004,11,'B001','BBB','DDD',1000
union all select 2004,12,'A001','AAA','DDD',1200
union all select 2004,12,'B001','BBB','DDD',1050

/*--处理要求

 将月份做为字段,并且反应逐月的工资增幅,例如上面的数据要求结果如下,注意最小的年月是没有增幅的

No     Name   部门   2004_10   2004_11  2004_11增幅  2004_12  2004_12增幅 
------ ------ ------ --------- -------- ----------- --------- ------------
A001   AAA    DDD    1000      1100     10.00%      1200      9.09%
B001   BBB    DDD    800       1000     25.00%      1050      5.00%
--*/

go

--查询处理
declare @s nvarchar(4000),@i int
select @s='',@i=0
select @s=@s+','+quotename(fd)
  +'=sum(case when a.year='+year
  +' and a.month='+month
  +' then a.工资 end)'
 +case @i when 0 then ''
  else ','+quotename(fd+'增幅')
   +'=cast(cast(sum(case when a.year='+year
   +' and a.month='+month
   +' then a.工资-b.工资 end)*100.'
   +'/sum(case when a.year='+year
   +' and a.month='+month
   +' then b.工资 end)'
   +' as decimal(10,2)) as varchar)+''%'''
 end,@i=@i+1
from(
 select year=rtrim(year),month=rtrim(month),
  fd=rtrim(year)+'_'+rtrim(month)
 from tb group by year,month)a
exec('select a.No,a.Name,a.部门'+@s+'
from tb a
 left join tb b on a.No=b.No and a.Name=b.Name and a.部门=b.部门
  and a.year=b.year+(b.month)/12
  and a.month=b.month%12+1
 group by a.No,a.Name,a.部门')
go

--删除测试
drop table tb

SQL动态生成交叉表应用范例

交叉表的应用较为丰富,应用的方式与范围也是十分丰富。
  • qiushuisen
  • qiushuisen
  • 2014年10月17日 07:26
  • 1126

Mysql5 实现交叉表查询

交叉表、行列转换和交叉查询经典 一、什么是交叉表 “交叉表”对象是一个网格,用来根据指定的条件返回值。数据显示在压缩行和列中。这种格式易于比较数据并辨别其趋势。它由三个元素组成:     行...
  • a437629292
  • a437629292
  • 2015年12月15日 17:04
  • 1718

水晶报表中几种交叉表的实现方法

水晶报表中几种交叉表的实现方法 交叉表,顾名思义,就是行和列交叉,用于将行上的数据,作为列指标来呈现。 用一个图直观的说明一下,就是将图1中的数据样式 最终呈现为如图2的效果 实际在使用中...
  • postfxj
  • postfxj
  • 2016年10月05日 09:39
  • 1080

03_8Pandas_透视表与交叉表

import pandas as pd import numpy as npdataset_path = './starcraft.csv' df_data = pd.read_csv(dataset...
  • sinat_33761963
  • sinat_33761963
  • 2016年12月26日 17:13
  • 1226

如何利用FastReport创建交叉报表?

转自:http://www.fastreportcn.com/Article/92.html 本文我们将创建一个交叉报表,用于显示员工四年中的工资。要创建交叉报表,我们需要使用到Fa...
  • cw370008359
  • cw370008359
  • 2014年12月11日 13:24
  • 1082

JasperReport报表开发之转置交叉表

使用Jasper或BIRT等报表工具时,常会碰到一些非常规的统计,用报表工具本身或SQL都难以处理,比如源数据不符合交叉表的要求,需要转置后再呈现。集算器具有结构化强计算引擎,集成简单,可以协助报表工...
  • u012388497
  • u012388497
  • 2015年07月24日 09:05
  • 1183

9、spss做交叉表检验和对应分析

前边我们已经讲过很多内容了。回顾一下,主要有相关分析,假设检验,和各种回归。以及因子分析。我们知道,对于两组连续变量,我们可以通过假设检验来判断他们的分布是否相同,差异时候存在。不知道大家想过没有,如...
  • NIeson2012
  • NIeson2012
  • 2015年04月15日 15:35
  • 2981

第八章 BIRT交叉报表

8.1 创建交叉报表和统计 一、创建报表和配置数据源 新建一个报表,改好自己的名字,然后next进行下一步。 选择一个空白报表(Blank Report),单击finish完成。 ...
  • huazaichang
  • huazaichang
  • 2013年01月25日 22:14
  • 1429

ReportStudio入门教程(九十) - 在交叉表表头显示占比

这里随手记录一下小功能,在交叉表显示占比,之前遇到过一个问题,
  • jolingogo
  • jolingogo
  • 2014年08月29日 16:47
  • 1466

ReportStudio入门教程(三十一) - 交叉表复杂表头

之前我们学习使用了列表的复杂表头,
  • jolingogo
  • jolingogo
  • 2014年04月16日 14:23
  • 3372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:逐月对比的交叉表处理
举报原因:
原因补充:

(最多只允许输入30个字)