关于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. MTT学习小记

    这是个毒瘤题才有的毒瘤东西--奶一口NOI不考 拆系数FFT: 考虑做NTT时模数不是NTT模数(\(2^a*b+1\))怎么办? 很容易想到拆次数FFT. 比如说现在求\(a*b\),设\(m=\s ...

  2. IOI 2005 River (洛谷 3354)

    题目描述 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫 ...

  3. csp-s模拟测试96

    csp-s模拟测试96 $T1$一眼慢速乘,$T2$稍证一手最优性尝试用神奇数据结构优化,无果,弃.$T3$暴力+信仰. 100 03:16:38 95 03:16:56 35 03:17:10 23 ...

  4. Windows内核驱动开发入门学习资料

    声明:本文所描述的所有资料和源码均搜集自互联网,版权归原始作者所有,所以在引用资料时我尽量注明原始作者和出处:本文所搜集资料也仅供同学们学习之用,由于用作其他用途引起的责任纠纷,本人不负任何责任.(本 ...

  5. 23种常用设计模式的UML类图

    23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...

  6. pop&dismiss

    //dismiss到根视图 - (void)dismissToRootViewController{ UIViewController *vc = self; while (vc.presenting ...

  7. AOP与IOC的概念(即spring的核心)

    a) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而spring的核心是IOC控制反转和AOP面向切面 ...

  8. robotframework冷门关键字

    1.Reload Page 模拟页面重载 2.Register Keyword To Run On Failure 参数: Keyword 描述: 当Selenium2Library类库关键字执行失败 ...

  9. yii2使用vendor文件夹下的的css文件

    yii2 使用 vendor 下在css样式, 可以新建一个Asset,定义 public $sourcePath="@vendor/..",如:public $sourcePat ...

  10. CF431E Chemistry Experiment

    题意:有n个试管,有高度为hi的水银.操作1:将试管x中的水银高度改成y.操作2:将体积为v的水注入试管,求水位的高度?n,q<=1e5. 标程: #include<bits/stdc++ ...