sql 分组统计查询并横纵坐标转换
关于sql 分组统计查询,我们在做报表的时候经常需要用到;今天就在这里整理下;
先附上一段sql代码:
if object_id(N'#mytb',N'U') is not null drop table #mytb
go
declare @Year int
set @Year=2014
create table #mytb ([Date] int,[Count] int,[Price] decimal(18, 0),[spbm] varchar(50),[sppp] varchar(100),[spmc] varchar(500))
insert #mytb
select *from
(
select
m as [Date],
sum(
case when datepart(month,c.addtime)=m
then ordernum else 0 end
) as [Count] ,
sum(
case when datepart(month,c.addtime)=m
then ordernum*orderPrice else 0 end
) as Price,
c.spbm,
s.sppp,
s.spmc
from
TB_CusorderDetail c left join TB_SPXX s on c.spbm=s.spbm,
(
select 1 m
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 12
) aa
where
@Year=year(c.addtime)
and c.delstatus=0 and c.spbm in (SELECT spbm FROM TB_SPXX WHERE delstatus=0 AND isupinfo=1 AND spbm LIKE '1%' AND LEN(SPBM)>7)
group by
m,c.spbm,s.sppp,s.spmc
)z
select sppp,spmc,spbm,
max(case [Date] when 1 then [Count] else 0 end) '一月份总量',
max(case [Date] when 1 then [Price] else 0 end) '一月份总额',
max(case [Date] when 2 then [Count] else 0 end) '二月份总量',
max(case [Date] when 2 then [Price] else 0 end) '二月份总额',
max(case [Date] when 3 then [Count] else 0 end) '三月份总量',
max(case [Date] when 3 then [Price] else 0 end) '三月份总额',
max(case [Date] when 4 then [Count] else 0 end) '四月份总量',
max(case [Date] when 4 then [Price] else 0 end) '四月份总额',
max(case [Date] when 5 then [Count] else 0 end) '五月份总量',
max(case [Date] when 5 then [Price] else 0 end) '五月份总额',
max(case [Date] when 6 then [Count] else 0 end) '六月份总量',
max(case [Date] when 6 then [Price] else 0 end) '六月份总额',
max(case [Date] when 7 then [Count] else 0 end) '七月份总量',
max(case [Date] when 7 then [Price] else 0 end) '七月份总额',
max(case [Date] when 8 then [Count] else 0 end) '八月份总量',
max(case [Date] when 8 then [Price] else 0 end) '八月份总额'
from #mytb
group by sppp,spmc,spbm
关于这段sql代码,剖析如下:
1:新建一个临时表#mytb
create table #mytb ([Date] int,[Count] int,[Price] decimal(18, 0),[spbm] varchar(50),[sppp] varchar(100),[spmc] varchar(500))
2:分组查询12个月份数据
select *from
(
select
m as [Date],
sum(
case when datepart(month,c.addtime)=m
then ordernum else 0 end
) as [Count] ,
sum(
case when datepart(month,c.addtime)=m
then ordernum*orderPrice else 0 end
) as Price,
c.spbm,
s.sppp,
s.spmc
from
TB_CusorderDetail c left join TB_SPXX s on c.spbm=s.spbm,
(
select 1 m
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 12
) aa
where
@Year=year(c.addtime)
and c.delstatus=0 and c.spbm in (SELECT spbm FROM TB_SPXX WHERE delstatus=0 AND isupinfo=1 AND spbm LIKE '1%' AND LEN(SPBM)>7)
group by
m,c.spbm,s.sppp,s.spmc
)z
这段sql主要根据年份查询当年12个月份售出的产品统计;
3:横纵坐标转换
把分组查询出来的数据插入到临时表中后
select sppp,spmc,spbm,
max(case [Date] when 1 then [Count] else 0 end) '一月份总量',
max(case [Date] when 1 then [Price] else 0 end) '一月份总额',
max(case [Date] when 2 then [Count] else 0 end) '二月份总量',
max(case [Date] when 2 then [Price] else 0 end) '二月份总额',
max(case [Date] when 3 then [Count] else 0 end) '三月份总量',
max(case [Date] when 3 then [Price] else 0 end) '三月份总额',
max(case [Date] when 4 then [Count] else 0 end) '四月份总量',
max(case [Date] when 4 then [Price] else 0 end) '四月份总额',
max(case [Date] when 5 then [Count] else 0 end) '五月份总量',
max(case [Date] when 5 then [Price] else 0 end) '五月份总额',
max(case [Date] when 6 then [Count] else 0 end) '六月份总量',
max(case [Date] when 6 then [Price] else 0 end) '六月份总额',
max(case [Date] when 7 then [Count] else 0 end) '七月份总量',
max(case [Date] when 7 then [Price] else 0 end) '七月份总额',
max(case [Date] when 8 then [Count] else 0 end) '八月份总量',
max(case [Date] when 8 then [Price] else 0 end) '八月份总额'
from #mytb
group by sppp,spmc,spbm;
利用日期昨晚扭转横纵坐标;
最后附上一图,体现最终结果
sql 分组统计查询并横纵坐标转换的更多相关文章
- SQL Fundamentals: 分组统计查询(FROM-WHERE-GROUPBY-HAVING-SELECT-ORDER BY)
SQL Fundamentals || Oracle SQL语言 统计函数 单字段分组统计(GROUP BY) 多字段分组统计 HAVING子句 控制操作的显示列:基本的SELECT语句 控制行:限定 ...
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- Oracle数据库从入门到精通-分组统计查询
视频课程:李兴华 Oracle从入门到精通 视频课程学习者:阳光罗诺 视频来源:51CTO学院 整体内容: 统计函数的使用 分组统计查询的实现 对分组的数据过滤 统计函数 在之前我们就学习过一个COU ...
- mysql加强(3)~分组(统计)查询
一.分组(统计) 查询 1.语法 : select [distinct] *| 分组字段1[别名] [,分组字段2[别名],...] | 统计函数 from 表名 [别名] [where 条件(s)] ...
- SQL 分组统计 行转列 CASE WHEN 的使用
原文地址:http://blog.itpub.net/26451903/viewspace-733526 原文在分组统计部分 sql是有问题的 本文已将sql改正 已用红色标记 Cas ...
- 简单的sql分组统计
一个记录员工打卡时间的表,只有两个有效字段 员工名称,打卡时间,现在要统计某一天中,每个员工的打卡次数.最早打卡时间.最晚打卡时间,问sql怎么写? 其实这个sql很简单, 1.首先要明确既然是按每个 ...
- oracle sql小结(主要讲横列转换的例子)decode 以及case
--建表 create table kecheng( id NUMBER, name VARCHAR2(20), course VARCHAR2(20), score NUMBER); --插入数据i ...
- SQL分组聚合查询练习(SQL Server和Oracle相似)20190514
先建表 CREATE TABLE [dbo].[orderdt_jimmy]( ,) NOT NULL, [order_nid] [int] NOT NULL, ) NOT NULL, [qty] [ ...
- MySQL 分组统计查询 表连接(3)
1 查询底薪超过公司平均底薪的员工信息? select e.empno,e.ename,e.salfrom t_emp as e join (select avg(sal) as avg from t ...
随机推荐
- 一张图看懂阿里云网络产品【十五】IPv6 解决方案
摘要: 作为国内首家全面支持IPv6的云厂商,阿里云12月再次推出全栈IPv6解决方案,核心产品已全面支持,协助客户小时/天级即可完成IPv6 访问.方案成功历经优酷.淘宝.天猫.双十一考验.SLB ...
- bzoj1061题解
[解题思路] 设类型i的志愿者,即第Si天~第Ti天工作的志愿者,共招募xi个,于是有不等式组Σxj≥Ai(Sj≤i≤Tj). 这样,题目就变成了求一组满足一次不等式组的xi,使ΣCixi最小,即标准 ...
- [NOI.AC] candy
题意:求净利益. 思路: 其实我也不怎么懂题面. 不过这种题一般来说就是从最大的开始选. 所以考虑贪心. 那么代价如何处理呢?? 我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次 ...
- [Python]PDF合成小程序PDF合成小程序
运行平台:Python3.5 用刀了PyPDF2这个库,需要提前下载好. 源码如下: import PyPDF2, os #建立一个装pdf文件的数组pdfFiles = [] for fileNam ...
- kettle 中 java.lang.ClassCastException: [B cannot be cast to java.lang.String报错的解决方法
问题描述:从数据库中查询出的某字段是json类型数据,然后在json输入步骤报错java.lang.ClassCastException: [B cannot be cast to java.lang ...
- 4-MySQL高级-事务-提交(3)
提交 为了演示效果,需要打开两个终端窗口,使用同一个数据库,操作同一张表 step1:连接 终端1:查询商品分类信息 select * from goods_cates; step2:增加数据 终端2 ...
- MZ头里面的东西。真他妈多
最后一个字段,也就是e_lfanew,的值表示PE头相对于文件首部的偏移,也就是说,在它的值所对应的位置,就是PE头的地址, 数据结构名称 值 e_magic: 0x5A4D->‘MZ’ e_c ...
- abstract类中method
一.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不可以,因为abstract申明的方法是要求子类去实现的,abstrac ...
- OC中Nil nil NULL 和 [NSNULL null]的区别
关于这个问题看过两三次了,但是每次过两个月脑袋里又会不清晰,索性记录一下加深一下印象. 一.nil 当一个对象置为nil时,这个对象的内存地址就会被系统收回.置空之后是不能进行retain,copy等 ...
- Python|读、写Excel文件(三种模块三种方式)
python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别: 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pandas进行excel读写: imp ...