/*--原帖地址:
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

转载于:https://www.cnblogs.com/wayne-ivan/archive/2007/06/29/800439.html

逐月对比的交叉表处理相关推荐

  1. sql交叉报表实例(转)

    建表: 在查询分析器里运行: CREATE TABLE [Test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [nvarchar] (50) CO ...

  2. sql行转列 列数据不定 sql交叉报表实例

    sql交叉报表实例 建表: 在查询分析器里运行: CREATE TABLE [Test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [nvarcha ...

  3. 生成交叉表的简单通用存储过程

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_qry]') and OBJECTPROPERTY(id ...

  4. SqlServer生成交叉表大全

     SqlServer如何生成动态交叉表查询 VB+MS SqlServer,是我们目前开发数据库应用系统最常用的模式,翻翻以前的老帖子,有一些SqlServer的问题经常被提出来,但正确解答甚少,现把 ...

  5. 报表工具对比之润乾报表与锐浪报表对比

    目前市场上报表工具五花八门,国内的.国外的.开源的.收费的,让人不免有眼花缭乱之感.本文将简单地从报表设计.数据处理.数据填报.数据分析.集成调用几方面对大家使用的比较多的润乾报表和锐浪报表(Grid ...

  6. 97.分组交叉表、复杂交叉表

    案例1-分组交叉表: 案例3:CREATE proc p_qry @JFKMBID varchar(20), @JFKMBSYSID varchar(1000), @date1 datetime, @ ...

  7. 交叉表查询(TRANSFORM)

    sql中没有类似ACCESS的标准交叉表处理功能.      使用CASE和GROUP子句才是正确的选择(sql联机帮助也是这样说的,官方推荐) 动态列的问题,可以通过动态sql语句实现. --参考: ...

  8. 1. 机器学习概述与特征工程

    文章目录 1.机器学习概述 1.机器学习工作流程 学习目标 1 什么是机器学习 2 机器学习工作流程 2.1 获取到的数据集介绍 2.2 数据基本处理 2.3 特征工程 2.4 机器学习 2.5 模型 ...

  9. sklearn-机器学习笔记

    文章目录 教程 环境配置 Anaconda和Jupyter 更换pip源 机器学习概述 1.1 人工智能概述 1.1.2 机器学习.深度学习能做些什么 1.2 什么是机器学习 1.2.3 数据集构成 ...

最新文章

  1. 微型计算机技术 第三章,微型计算机技术第三章部分答案概要.docx
  2. 空洞卷积(Dilated Convolution):有之以为利,无之以为用
  3. 比较两篇文章的相似性
  4. 西点军校邀马云谈领导力:要为年轻人和未来做决策_演讲
  5. Powershell有哪些用途
  6. Tosca database help link
  7. 2022年寒假ACM练习2(待补题)
  8. python深度学习之TensorFlow
  9. Mybatis中取循环获取 Oracle自增序列 重复值问题
  10. C语言---用筛选法求100以内的素数
  11. Spring Interceptor vs Filter 拦截器和过滤器区别
  12. 这样配置win10亲测不错
  13. linux下chm阅读器
  14. 科研突破:非宁静无以致远
  15. 联想计算机系统重装,联想笔记本电脑一键重装系统的方法
  16. android 布局滑动消失,SlideUp-Android
  17. 图像处理笔记4-霍夫变换直线检测、圆检测
  18. node.js基于微信小程序的校园失物招领毕业设计源码072343
  19. 微信接口验证类php,微信公众平台消息接口校验与消息接口响应实例
  20. 坤泰股份在深交所上市:预计全年营收超4亿元,张明夫妇为实控人

热门文章

  1. 强烈推荐!入门大数据分析必看的知识点总结,适合零基础学习
  2. 图说可视化,报表也能做得如此酷炫!
  3. java语言c语言基础_新手入门选什么:有些人说C语言要比Java更难!你应该怎么办?...
  4. (第八章)左右外连接
  5. python面向对象是什么?面试技巧(三分钟读懂)
  6. php验证规则表单,PHP Yii框架之表单验证规则大全
  7. 【caffe-windows】 caffe-master 之 卷积核可视化(利用matlab)
  8. R语言中按某个符号来分割字符串
  9. [转]java selenium webdriver实战 应用小结
  10. leetcode947. Most Stones Removed with Same Row or Column