复杂sql分组查询 ( pivot)
一个数据表里面字段有年、月、日、金额、支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行,
最后在增加一列小计当前的所有支付方式的金额。如下图:
原sql查询出来的结果是这样的:
-------------------------------------------------------------------------------------------
然后想实现的sql结果最后呈现是这样的:
这可为难了我了,简单的增删改查左右链接sql语句我还会写,这个稍微复杂一点我就不知道如何下手了。该怎么分组,然后把行增加为列呢?
去找度娘搜的时候,都不知道怎么描述自己的想搜的关键字。最后找了一位sql高手同学帮忙解决了这个问题,
人家只是一句简单的sql语句就把我的需求给实现了,实在是让我佩服!这个pivot关键是什么东东,我还第一次看见,从来没用过,这么强大!
sql语句:
SELECT Year,Months,tDays,[], [BankIn],[iTunesHK] , []+[BankIn]+[iTunesHK] as total
FROM ( select * from #temp) AS t
PIVOT
(SUM(amount) FOR [PayType] IN ( [], [BankIn],[iTunesHK])) AS t;
效果截图如下:
:
原文链接:http://www.cnblogs.com/tandaxia/p/4888623.html
补充:关于一个循环插入数据sql语句问题
需求:随机从一个表查出5条ID,然后插入到另外一个表中。
实现:刚开始使用游标,后面头说效率不好,影响性能,然后改成临时表插入结果集。之前没写过这种sql, 感觉效果很棒,记录一下:
---- 使用游标循环插入-------
IF OBJECT_ID('sp_AddRecord') IS NOT NULL
DROP proc sp_AddRecord
GO
CREATE proc sp_AddRecord
@ID int -- 传入的id参数
as
BEGIN Tran --使用游标循环插入到记录表中tbl_Record
declare @FromID int
declare Temp_Cursor cursor for --定义游标cursor1
select top 5 ID from tbl_Member where ID<>@ID order by newid() -- 随机获取5个ID
open Temp_Cursor --打开游标 fetch next from Temp_Cursor into @FromID --将游标向下移1行,获取的数据放入之前定义的变量@ToID中 while @@fetch_status=0 --判断是否成功获取数据
begin
--进行相应处理(跟据需要填入SQL文)
insert into tbl_Record (FromID, ToID, [Status], CreateDate) values(@FromID, @ID, 0, GETDATE())
fetch next from Temp_Cursor into @FromID --将游标向下移1行
end close Temp_Cursor --关闭游标
deallocate Temp_Cursor --释放游标 If @@ERROR <> 0 Goto Err Select 1 As ResultStatus
Commit Tran
Return
Err:
Select 0 As ResultStatus
RollBack Tran
Return
GO
--- 使用临时表插入结果,实现同样的效果,效率更好 -----
IF OBJECT_ID('sp_AddRecord') IS NOT NULL
DROP proc sp_AddRecord
GO
CREATE proc sp_AddRecord
@ID int -- 传入的id参数
as
BEGIN Tran select top 5 ID Into #DatingMember from tbl_Member where ID<>@ID order by newid() -- 随机获取5个ID insert into tbl_Record (FromID, ToID, [Status], CreateDate)
Select ID,@ID As ToID,0, GETDATE()
From #DatingMember Drop Table #DatingMember --删除临时表 If @@ERROR <> 0 Goto Err Select 1 As ResultStatus
Commit Tran
Return
Err:
Select 0 As ResultStatus
RollBack Tran
Return
GO
复杂sql分组查询 ( pivot)的更多相关文章
- SQL分组查询及聚集函数的使用
今天要做一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好:其实就是group by子句和几个聚集函数,熟练使用统计功能很简单.在此总结下今 ...
- SQL分组查询group by
注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group ...
- SQL分组查询GroupBy
一.分组查询1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式 ...
- SQL 分组查询 group by
select * from emp --deptno 为部门号 --输出每个部门的编号 和 该部门的平均工资 --group by deptno; 通过deptno分组 select deptno, ...
- SQL分组查询每组前几条数据
/*第一种实现方法,效率低并且有错误*/ DECLARE @DD DATETIME SET @DD = GETDATE() SELECT a.GoodsID , a.Account , a.LastU ...
- SQL分组查询
把数据分成多个逻辑组,以便能对每个组的数据进行操作,对每个组进行聚集计算. 1.创建分组 分组是在SELECT语句的GROUP BY子句中建立的 例子: SELECT vendId ...
- sql 分组查询及格不及格人数
select score as 类别,count(*) as 人数 from (select case when fen>=60 then '及格' else '不及格' end as scor ...
- mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)
一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...
- Group by 分组查询 实战
实战经历,由于本人在共享单车上班,我们的单车管理模块,可以根据单车号查询单车,但是单车号没有设置unique(独一无二约束),说以这就增加了单车号可能重复的风险,但是一般情况下,单车号是不会重复的,因 ...
随机推荐
- 爬虫--Scrapy
Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...
- OGNL和ValueStack
OGNL简介 OGNL的全称是Object Graph Navigation Language,即对象导航图语言.它是一个开源项目,工作在视图层,其通过简单一致的表达式语言来读取合适者Java对象的属 ...
- Ionic2学习笔记(3):Pipe
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5538630.html Pipe类似过滤器,比如,在一个字符串要展现在页面之前, 我们需要对这个字符串 ...
- Emit学习(1) - HelloWorld
之前看过Dapper(使用到了Emit), CYQ.Data(另一种思路,没有使用Emit)类的框架之后, 也想自己做一个小框架玩一下, 不过此时能力太过欠缺, 做不了Cyq.Data或者PDF.Ne ...
- 从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...
- WPF学习之绘图和动画
如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是 ...
- RabbitMQ入门教程——工作队列
什么是工作队列 工作队列是为了避免等待一些占用大量资源或时间操作的一种处理方式.我们把任务封装为消息发送到队列中,消费者在后台不停的取出任务并且执行.当运行了多个消费者工作进程时,队列中的任务将会在每 ...
- Microsoft.Practices.Unity入门
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- Xamarin.ios——First APP
环境:MAC+Xamarin Studio 先讲讲安装吧,最普遍的方法就是去Xamarin官网,注册个账号,填写信息啥的开始下载,安装.但,在天朝的网络环境下,在下载android模块的东东时,总会下 ...
- 百度地图自定义Marker
最近写了百度地图的Demo,所以总结下遇到的问题: 1.首先在百度地图中创建应用时用到 发布版SHA1是在Preferences下的Android下的Build中;2.在使用百度地图时,先要创建一个A ...