当前位置: 首页 > 编程日记 > 正文

一道SQL统计试题

根据上图A表和B表,按照年份和地区生成1至12个月的数据,结果如下:

方法一:

select YEAR,AreaName,
MAX(case Month when '1' then Money else 0 end) as [1月],
MAX(case Month when '2' then Money else 0 end) as [2月],
MAX(case Month when '3' then Money else 0 end) as [3月],
MAX(case Month when '4' then Money else 0 end) as [4月],
MAX(case Month when '5' then Money else 0 end) as [5月],
MAX(case Month when '6' then Money else 0 end) as [6月],
MAX(case Month when '7' then Money else 0 end) as [7月],
MAX(case Month when '8' then Money else 0 end) as [8月],
MAX(case Month when '9' then Money else 0 end) as [9月],
MAX(case Month when '10' then Money else 0 end) as [10月],
MAX(case Month when '11' then Money else 0 end) as [11月],
MAX(case Month when '12' then Money else 0 end) as [12月]
from 
(
select B.AreaName, 
SUM(Money) as Money,YEAR(CreateOn) Year,Month(CreateOn) Month
from A left join B on A.AreaId=B.AreaId
group by AreaName, YEAR(CreateOn),Month(CreateOn)
) A group by Year,AreaName
order by Year,AreaName

方法二:

select Year,AreaName,
ISNULL([1],0) as [1月],ISNULL([2],0) as [2月],ISNULL([3],0) as [3月],ISNULL([4],0) as [4月],
ISNULL([5],0) as [5月],ISNULL([6],0) as [6月],ISNULL([7],0) as [7月],ISNULL([8],0) as [8月],
ISNULL([9],0) as [9月],ISNULL([10],0) as [10月],ISNULL([11],0) as [11月],ISNULL([12],0) as [12月]
from 
(
select B.AreaName, 
SUM(Money) as Money,YEAR(CreateOn) Year,Month(CreateOn) Month
from A left join B on A.AreaId=B.AreaId
group by AreaName, YEAR(CreateOn),Month(CreateOn)
)
A 
pivot
(sum(money)for Month in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
) as pvt
order by Year,AreaName

方法三:

--先创建表变量,并插入月份数据
declare @tb table(Month varchar(2)) 
insert @tb select 1 union all select 2 union all select 3 union all select 4 union all
select 5 union all select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11 union all select 12declare @sql varchar(8000)
set @sql = 'select Year,AreaName '
select @sql = @sql + ' , max(case Month when ''' + convert(varchar(10),Month) + ''' then Money else 0 end) [' + convert(varchar(10),Month) + '月]'
from 
(select Month from @tb--select distinct Month(CreateOn) Month from A 
) as a
set @sql = @sql + '  from 
(select B.AreaName, SUM(Money) as Money,YEAR(CreateOn) Year,Month(CreateOn) Monthfrom A left join B on A.AreaId=B.AreaIdgroup by AreaName, YEAR(CreateOn),Month(CreateOn)
)
tb group by Year,AreaName'
--print @sql
exec(@sql) 

转载于:https://www.cnblogs.com/gdjlc/archive/2011/07/16/2108179.html

相关文章:

【单片机】时钟周期 器械周期 指令周期的关系

1、 时钟周期(振荡周期):始终周期也称振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的单位。在一个始终周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。始终周期表示了SDRAM&#xf…

Painting A Board --POJ 1691

1、题目类型:暴力法、DFS。 2、解题思路:题意,一块大的矩形区域的被分成多个矩形区域,现在要给不同的区域涂上不同的颜色,有不同颜色的刷子可以提供,每个刷子可以刷一种不同的颜色。每刷一次,将…

《JavaScript高级程序设计》读书笔记【一】

JavaScript介绍 ECMAScript,由ECMA-262定义,提供核心语言功能;  文档对象模型(DOM),提供访问和操作网页内容的方法和接口;  浏览器对象模型(BOM),提供与浏…

上不了名校?可以在 GitHub 上读他们的课程

今天开始,全国各大区域的高考成绩陆续公布,又到了几家欢喜几家愁的时刻,如果你准备报考计算机相关专业,但是又由于分数不高而苦恼。别担心,在 GitHub 上有着大量的名校教学资源,即使上不了名校,…

【java】各种方法的使用(不定期更新)

疑难杂症篇 1、输入一个字符的方法 问题在于Scanner中没有一个类似于nextInt()之类的函数。 代码实现 char num scanner.next().charAt(0);2、将字符串转化为数字 没啥问题就是记不下来 代码实现: int a1 Integer.parseInt(i1);3、字符串转化为字符数组的方法 …

SQL SERVER 触发器示例

触发器是一种特殊的存储过程。 触发器语法 : CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ DELETE ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS sql_statement [ ...n ] 示…

vc数据库知识

在连接SQL数据库时,数据库的链接: _bstr_t strConn"ProviderSQLOLEDB.1;Data Source.;Initial Catalogdb_test;Integrated SecuritySSPI;Persist Security InfoFalse"; _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(__uuidof(connection)…

jmeter 测试 api 接口方法

双击 “jmeter.bat” 打开 Jmeter 页面,如下图所示。 右击“测试计划”,添加 -> Theaders(Users) -> 线程组 在线程组中可以设置线程数、并发数、循环数等。 下面开始进行几种 jmeter 的接口测试方法。 1、get 请求配置 右击…

我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性

摘要 MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化。 园子里有很多大鸟都对MVC了如指掌,面对问题犹同孙悟空的七十二变一般游刃有余,令…

【java】兴唐第12-14节笔记整理

第十四节课 1、eclipse快捷键 alt shift s给所有属性写get set函数 2、给文件重命名: ctrl F2 3、上转型对象调用方法调用的是子类重写的方法 4、在任何情况下,子类对象都可以访问父类受保护方法(protected) 注意: …

[ZZ]Map/Reduce hadoop 细节

转自:Venus神庙原文:http://www.cnblogs.com/duguguiyu/archive/2009/02/28/1400278.html 分布式计算(Map/Reduce) 分布式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google …

类加载器双亲委派模式

双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中…

Kubernetes 架构(下)【转】

上一节我们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点。 Node 是 Pod 运行的地方,Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node上运行的 Kubernetes 组件有 kubelet、kube-proxy 和 Pod 网络(例如 flannel&#…

【工具软件】Xmind的使用

1、打开历史保存的记录的方法 窗口 - 文本编辑历史 - 恢复 2、批量修改 编辑 - 查找/替换 3、如果子主体很多,而且有文本格式的,可以直接选中父父主题复制粘贴 4、窗口 - 黑匣子 自己做的脑图系统会自动备份。 5、常用快捷键 (1)创建子主…

小脚本,统计一个目录下满足特定条件文件的代码行数

find -regex .*cc -o -regex .*h | xargs wc -lfind也自带了执行命令的方法:find -regex .*cc -o -regex .*h -exec wc -l {} \; 这种方法的结果不太对,只能统计到满足 -regex .*h 的文件注明一下: find默认从当前目录递归的查找&#xff1b…

CCNA CCNP CCIE所有实验名称完整版

只能仅供参考了!具体的实验内容就没了,失望了!实验1:通过Console端口访问Cisco路由器  实验2:通过Telnet访问Cisco路由器  实验3:配置终端服务器  实验4:通过浏览器访问路由器  实验5&#…

Real World Haskell 第七章 I/O

几乎所有程序都是用来从外部世界收集数据,处理数据,并把处理结果返回给外部世界的。也就是说,输入和输出对于程序设计来说相当关键。Haskell的I/O系统很强大,表达能力很强也很容易使用,理解它的原理对于学习Haskell来说…

malloc函数分配失败处理的严重性

本次在实际测试情况下,发现程序无缘无故的异常,导致看门狗超时复位,经过排查是malloc函数分配失败的时候,依然对指针进行了操作,导致异常。以前没重视这个问题是因为,总觉的malloc基本都会成功的&#xff0…

kvm--virsh命令行下管理虚拟机

virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式; (1)基础操作 --- 命令行下管理虚拟机 virsh list 列出当前宿…

【java】兴唐第十八节课

1、java接口的关键字:implements,可实现多个接口,接口接口之间使用逗号分隔。 注: 继承只能继承一个,接口可以实现多个 2、在接口里所有的方法都是抽象方法,不用关键字abstract修饰。 3、接口不能定义变量&#xff0…

转换前台javascript传递过来的时间字符串到.net的DateTime

javascript: var datenew Date().toString();得到的结果类似于:Wed Oct 27 2010 08:53:04 GMT0800 如何在C#中把这个字符串转换为DateTime类型呢?DateTime.ParseExact("Wed Oct 27 16:23:44 UTC0800 2010","ddd MMM dd HH:mm:ss UTCzzzzz yyyy"…

树状数组 | 1057

用哈希,把push的数x作为下标给hashTable(实则不存在,直接用tree树状数组记录数据)1,pop则是以最后一个数x作为下标-1 。 树状数组和其原理不再赘述,需要注意的是最后的二分搜索(实则是lower_bou…

7、vue中将token存到cookie

使用js-cookie工具: 1.npm i js-cookie //安装2.import Cookies from js-cookie //引用 // 存入cookie:Cookies.set(token,value) // 获取cookie:Cookies.set(token) //删除cookie:Cookies.remove(token)转载于:https://www.cnblogs.com/xlfd…

MySQL数据库表名、列名、别名区分大小写的问题

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: 1、数据库名与表名是严格区分大小写的; 2、表的别名是严格区分大小写的; 3、列名与列的别名在所有的情况下均是忽略大小写的; 4、变量名也是严格区分大小写的&#…

【java】兴唐第十七节课

1、抽象类: 概念:由abstract修饰的类叫抽象类。 特征:在抽象类中有抽象方法 注意: (1)抽象方法必须定义到抽象类中,即有抽象方法的类一定是抽象类。抽象类的非抽象子类必须实现父类的抽象方法&#xff0c…

条款22: 尽量用“传引用”而不用“传值”

c语言中,什么都是通过传值来实现的,c继承了这一传统并将它作为默认方式。除非明确指定,函数的形参总是通过“实参的拷贝”来初始化的,函数的调用者得到的也是函数返回值的拷贝。正如我在本书的导言中所指出的,“通过值…

C++ RCSP智能指针简单实现与应用

智能指针的实现代码来源博客:《http://blog.csdn.net/to_be_better/article/details/53570910》 修改:添加 get()函数,用以获得原始指针(raw pointer)。 其余思路来源《Effective C》 智能指针的实现代码如下&#xff…

末学者笔记--openstack共享组件:rabbitmq(3)

openstack共享组件:消息队列rabbitmq 一、MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信&#xf…

【matlab】2019.5.10第一节上机课练习

1、计算角度和弧度的方法 例 a 17,b 24,c 26 求一个角分别以角度和弧度的方式给出 解: %//用余弦定理求出余弦值 pos (a b c)/(2*a*b) %//用acos求出弧度值 angle acos(pos)%//求出角度值realangle angle*180/pi2、创建矩阵的方法 A…

【学习笔记】Silverlight框架:Jounce(4)——事件通信

Prism、CM和Jounce里都有各自的事件通信机制,也都叫EventAggregator。 相比于Prism,Jounce里的EventAggregator的风格更接近CM。当然作者也是这么说的:The pattern here is based on the lightweight version Rob Eisenburg introduced with …