关于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 分组统计查询并横纵坐标转换的更多相关文章

  1. SQL Fundamentals: 分组统计查询(FROM-WHERE-GROUPBY-HAVING-SELECT-ORDER BY)

    SQL Fundamentals || Oracle SQL语言 统计函数 单字段分组统计(GROUP BY) 多字段分组统计 HAVING子句 控制操作的显示列:基本的SELECT语句 控制行:限定 ...

  2. 010.简单查询、分组统计查询、多表连接查询(sql实例)

    -------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...

  3. Oracle数据库从入门到精通-分组统计查询

    视频课程:李兴华 Oracle从入门到精通 视频课程学习者:阳光罗诺 视频来源:51CTO学院 整体内容: 统计函数的使用 分组统计查询的实现 对分组的数据过滤 统计函数 在之前我们就学习过一个COU ...

  4. mysql加强(3)~分组(统计)查询

    一.分组(统计) 查询 1.语法 : select [distinct] *| 分组字段1[别名] [,分组字段2[别名],...] | 统计函数 from 表名 [别名] [where 条件(s)] ...

  5. SQL 分组统计 行转列 CASE WHEN 的使用

    原文地址:http://blog.itpub.net/26451903/viewspace-733526 原文在分组统计部分  sql是有问题的     本文已将sql改正   已用红色标记  Cas ...

  6. 简单的sql分组统计

    一个记录员工打卡时间的表,只有两个有效字段 员工名称,打卡时间,现在要统计某一天中,每个员工的打卡次数.最早打卡时间.最晚打卡时间,问sql怎么写? 其实这个sql很简单, 1.首先要明确既然是按每个 ...

  7. oracle sql小结(主要讲横列转换的例子)decode 以及case

    --建表 create table kecheng( id NUMBER, name VARCHAR2(20), course VARCHAR2(20), score NUMBER); --插入数据i ...

  8. SQL分组聚合查询练习(SQL Server和Oracle相似)20190514

    先建表 CREATE TABLE [dbo].[orderdt_jimmy]( ,) NOT NULL, [order_nid] [int] NOT NULL, ) NOT NULL, [qty] [ ...

  9. MySQL 分组统计查询 表连接(3)

    1 查询底薪超过公司平均底薪的员工信息? select e.empno,e.ename,e.salfrom t_emp as e join (select avg(sal) as avg from t ...

随机推荐

  1. NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)

    这个day1稍微有点毒瘤吧?? DAY1 排列 以前总是把day1t1想太复杂了翻车,差不多往正解的方向想了一下感觉不可能这么复杂这可是noipday1t1啊一定有非常简单的方法然后翻车了?? 题目转 ...

  2. post请求传文件

    public static JSONObject doFormDataPost(File file, String sURL) throws IOException { HttpClient cont ...

  3. csp-s模拟测试91

    csp-s模拟测试91 倒悬吃屎的一套题. $T1$认真(?)分析题意发现复杂度不能带$n$(?),计划直接维护答案,考虑操作对答案的影响,未果.突然发现可以动态开点权值线段树打部分分,后来$Tm$一 ...

  4. SPSS如何调用已建立的数据文件

    SPSS如何调用已建立的数据文件 调用已建立的数据文件 SPSS可以调用SPSS(*.sav),Excel(*.xls),dBASE(*.dbf),ASCII(*.dat,*.txt)等数据文件. 2 ...

  5. Spring源码由浅入深系列六 CreateBean过程

  6. QTableWidget学习

    一.这次项目需要用到,可以在tablewidget中添加item,并且可以通过鼠标的右键选项进行一些打开.删除等操作. 1.在构造函数中定制右键菜单选项 ui.tableWidget_2->se ...

  7. 20140312 Excel表格画折现图次坐标轴

    1.struct 是8字节对齐 2.char * a, sizeof(a)=4; char a[]="abcdefg";sizeof(a)=8; 3.内存对其齐

  8. 实现读取文本数据,在将数据导入mysql

    import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java ...

  9. springboot项目大量打印debug日志问题

    目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系 ...

  10. UVA 11178 /// 向量旋转 两向量夹角

    题目大意: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...