以订单统计为例,前端展示柱状图(Jquery统计):

表及主要字段描述如下;表名:Orders
1.日期CreateTime
2.金额Amount
3.用户UserID

情况一:
根据部门统计某一年每月销量(查询一个部门月统计)

1)直接在SQL语句中判断每月信息,好处,前台直接调用;坏处,性能不高。

SQL语句:

SELECT
SUM(CASE WHEN MONTH(s.CreateTime) = 1 THEN s.Amount ELSE 0 END) AS '一月',
SUM(CASE WHEN MONTH(s.CreateTime) = 2 THEN s.Amount ELSE 0 END) AS '二月',
SUM(CASE WHEN MONTH(s.CreateTime) = 3 THEN s.Amount ELSE 0 END) AS '三月',
SUM(CASE WHEN MONTH(s.CreateTime) = 4 THEN s.Amount ELSE 0 END) AS '四月',
SUM(CASE WHEN MONTH(s.CreateTime) = 5 THEN s.Amount ELSE 0 END) AS '五月',
SUM(CASE WHEN MONTH(s.CreateTime) = 6 THEN s.Amount ELSE 0 END) AS '六月',
SUM(CASE WHEN MONTH(s.CreateTime) = 7 THEN s.Amount ELSE 0 END) AS '七月',
SUM(CASE WHEN MONTH(s.CreateTime) = 8 THEN s.Amount ELSE 0 END) AS '八月',
SUM(CASE WHEN MONTH(s.CreateTime) = 9 THEN s.Amount ELSE 0 END) AS '九月',
SUM(CASE WHEN MONTH(s.CreateTime) = 10 THEN s.Amount ELSE 0 END) AS '十月',
SUM(CASE WHEN MONTH(s.CreateTime) = 11 THEN s.Amount ELSE 0 END) AS '十一月',
SUM(CASE WHEN MONTH(s.CreateTime) = 12 THEN s.Amount ELSE 0 END) AS '十二月'
FROM Orders AS s
WHERE YEAR(s.CreateTime) = 2014
--其他条件

结果:

一月    二月    三月    四月    五月    六月    七月    八月    九月    十月    十一月    十二月
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 741327.00 120505.00 0.00

2)统计出数据库里有值的月份,再前端逻辑判断其他月份补0

SQL语句:

SELECT
UserID,
MONTH ( CreateTime ) as 月份,
SUM( Amount ) as 统计
FROM
Orders
WHERE
YEAR ( CreateTime ) = 2014 -- 这里假设你要查 2014年的每月的统计。
--其他条件
GROUP BY
UserID, MONTH ( CreateTime ) 结果:

月份 销售额
10 741327.00
11 120505.00

情况二:
统计所有部门某一年每月销量

1)此数据量大的话影响性能,SQL语句(这里未联查部门表):

SELECT
UserID,
SUM(CASE WHEN MONTH(s.CreateTime) = 1 THEN s.Amount ELSE 0 END) AS '一月',
SUM(CASE WHEN MONTH(s.CreateTime) = 2 THEN s.Amount ELSE 0 END) AS '二月',
SUM(CASE WHEN MONTH(s.CreateTime) = 3 THEN s.Amount ELSE 0 END) AS '三月',
SUM(CASE WHEN MONTH(s.CreateTime) = 4 THEN s.Amount ELSE 0 END) AS '四月',
SUM(CASE WHEN MONTH(s.CreateTime) = 5 THEN s.Amount ELSE 0 END) AS '五月',
SUM(CASE WHEN MONTH(s.CreateTime) = 6 THEN s.Amount ELSE 0 END) AS '六月',
SUM(CASE WHEN MONTH(s.CreateTime) = 7 THEN s.Amount ELSE 0 END) AS '七月',
SUM(CASE WHEN MONTH(s.CreateTime) = 8 THEN s.Amount ELSE 0 END) AS '八月',
SUM(CASE WHEN MONTH(s.CreateTime) = 9 THEN s.Amount ELSE 0 END) AS '九月',
SUM(CASE WHEN MONTH(s.CreateTime) = 10 THEN s.Amount ELSE 0 END) AS '十月',
SUM(CASE WHEN MONTH(s.CreateTime) = 11 THEN s.Amount ELSE 0 END) AS '十一月',
SUM(CASE WHEN MONTH(s.CreateTime) = 12 THEN s.Amount ELSE 0 END) AS '十二月'
FROM Orders AS s
WHERE YEAR(s.CreateTime) = 2014
group by UserID

结果:

UserID    一月    二月    三月    四月    五月    六月    七月    八月    九月    十月    十一月    十二月
1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 53495.00 0.00
2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 738862.00 37968.00 0.00
3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2099.00 22849.00 0.00
4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 366.00 0.00 0.00
5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6193.00 0.00

2)百度看到有人提到列转行,未看到实例,不太清楚具体实现方式。有知道的朋友,请告知,谢谢!

SELECT
UserID,
MONTH ( CreateTime ) as 月份,
SUM( Amount ) as 统计
FROM
Orders
WHERE
YEAR ( CreateTime ) = 2014 -- 这里假设你要查 2014年的每月的统计。
GROUP BY
UserID,MONTH ( CreateTime ) 结果:
UserID 月份 统计
1 10 738862.00
2 10 2099.00
3 10 366.00
4 11 53495.00
1 11 37968.00
2 11 22849.00

5 11 6193.00

SqlServer mssql 按月统计所有部门的更多相关文章

  1. sqlserver 按日、周、月统计方法

    摘自于网络网络:http://blog.csdn.net/wanmdb/article/details/8080636 create table T(日期时间 datetime, 数量 int) in ...

  2. Oracle-SQL-按月统计自助终端交易量

    SQL实现的目标: 基本情况 现金交易情况 转账情况 转账交易情况(明细) 其它业务情况 交易量汇总 日均交易量 交易金额 绩效情况(万元) 支行名 支行号 所属网点 网点号 管理员帐户 管理员 终端 ...

  3. SQL-22 统计各个部门对应员工涨幅的次数总和,给出部门编码dept_no、部门名称dept_name以及次数sum

    题目描述 统计各个部门对应员工涨幅的次数总和,给出部门编码dept_no.部门名称dept_name以及次数sumCREATE TABLE `departments` (`dept_no` char( ...

  4. 实现mysql按月统计的教程

    From: http://www.jbxue.com/db/758.html 实现mysql按月统计的教程   mysql有个字段是DATETIME类型,要实现可以按月统计,该怎么写sql语句? se ...

  5. tp5月统计的bug

    月统计求和时 本月第一天没有统计到

  6. sql按月统计数量和按月累加统计数量

    1.简单的,按月统计数量 SELECT CREATE_DATE, DATE_FORMAT(CREATE_DATE, '%Y-%m') AS month , COUNT(*) AS sum FROM p ...

  7. mysql按日/周/月统计

    一.mysql按日统计 ) count ' and start_time > '2017-06-28' group by days; 二.mysql按周统计 ) ' group by weeks ...

  8. mysql按月统计六个月内不同类型订单的成交金额

    mysql按月统计六个月内不同类型订单的成交金额 创建数据库 CREATE DATABASE test; 创建订单表 CREATE TABLE `t_order` ( `id` ) NOT NULL ...

  9. echart报表插件使用笔记(二)--按月统计

    按月统计注冊人数 java类: package com.spring.controller; import java.io.IOException; import java.sql.Connectio ...

随机推荐

  1. Android工程师面试准备知识点

    听+7哥说,把下面的全弄懂,面试必过,所以我就试着去把所有题目补充了一下,各位能耐的网友们,如果有吐槽或者补充的尽管给我留言,在这里谢过大家了. 1.   android的多线程如何通信 答:Andr ...

  2. 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】

    本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...

  3. as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法【转http://blog.csdn.net/linjf520/article/details/9450945】

    package { import flash.display.InteractiveObject; import flash.display.Stage; import flash.events.Mo ...

  4. HDoj-2072-字数

    字数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  5. IDE idea 更换项目的JDK步骤

    1.如图:

  6. Jquery揭秘系列:谈谈bind,one,live,delegate,on事件及实现

    在Jquery里面,我们用的最多的就是事件绑定了,事件绑定有多个函数.例如:bind,one,live,delegate,on等等. on() jQuery事件绑定.on()简要概述及应用 看源码发现 ...

  7. C# 输入输出 常量变量

          //输出 Console.WriteLine("这是一行文字"); 自动回车的. Console.Write("Hello world");  不带 ...

  8. html5 canvas 画hello ketty

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. PHP学习日记(一)——类、函数的使用

    一.自定义函数 function add($a,$b){ $c=$a+$b; echo 'add test:'; echo $c; return $c; } add(1,2); 输出结果: add t ...

  10. ecshop使用Google API及OAuth2.0登录授权(PHP)

    一.申请clientID https://console.developers.google.com/project 二.开启Google+ API权限 https://console.develop ...