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 ...
随机推荐
- 依赖背包变形(经典)——poj1155
这个题用优化后的依赖背包做难以实现,所以用常规的泛化物品的和来做即可 每个节点的容量定义为这个节点下的叶子结点个数,dp[u][j]用来表示节点u下选取j个物品的最大收益,最后从m-0查询dp[1][ ...
- Python爬虫-《神雕侠侣》
Python3.5 爬取<神雕侠侣>http://www.kanunu8.com/wuxia/201102/1610.html 武侠迷,所以喜欢爬取武侠小说 #!/usr/bin/pyth ...
- ionic-CSS:ionic select
ylbtech-ionic-CSS:ionic select 1.返回顶部 1. ionic select ionic select 的 select 相比原生的要更加美观些.但是弹出的可选选项样式是 ...
- Function Run Fun-递归+细节处理
We all love recursion! Don't we? Consider a three-parameter recursive function w(a, b, c): if a < ...
- css3 常用的属性
1.伪类选择符 Pseudo-Classes Selectors Selectors选择符 CSS Version版本 Description简介 E:link CSS1 设置超链接a在未被访问前的样 ...
- CSS如何让文字垂直居中?
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- css玩转文字
<div style=" direction:rtl; unicode-bidi:bidi-override">文字被反转过来了</div> 执行后的效果为 ...
- 2019-8-31-dotnet-数组自动转基类数组提示-Co-variant-array-conversion-是什么问题
title author date CreateTime categories dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题 lindexi ...
- 一个有关group by的错误
事例:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资 SELECT department_name,MIN(salary),departments.manager_idFROM dep ...
- CSIC_716_20191031【计算机的组成】
引言 什么是编程语言 语言是人与人之间的沟通介质之一,编程语言是人与机器(包括计算机)之间沟通的介质. 一个完整的计算机系统主要包括 应用程序 .操作系统 和硬件 等. 计算机三大核心 ...