一、要求
1、表结构如下:
ID  DepartName(部门) Sales(销售量) SalesDate(销售日期)
1      营销一部       300              2006-7-1 
2      营销二部       500              2006-7-1 
3      营销三部       800              2006-8-1 
4      营销一部       600              2006-8-1 
5      营销二部       800              2006-8-1 
6      营销一部       400              2007-7-1 
7      营销二部       800              2007-7-1 
8      营销三部       700              2007-8-1 
9      营销一部       600              2008-7-1 
10     营销二部       300              2008-7-1 
2、要根据要求得到以下数据
1)得到同比数据
部门  对比年月 本月销售总量  去年同期销售总量 同比
营销一部 2006-07-01 300.00  NULL  无穷大
营销二部 2006-07-01 500.00  NULL  无穷大
营销三部 2006-08-01 800.00  NULL  无穷大
营销一部 2006-08-01 600.00  NULL  无穷大
营销二部 2006-08-01 800.00  NULL  无穷大
营销一部 2007-07-01 400.00  300.00  33.33%
营销二部 2007-07-01 800.00  500.00  60.00%
营销三部 2007-08-01 700.00  800.00  -12.50%
营销一部 2008-07-01 600.00  400.00  50.00%
营销二部 2008-07-01 700.00  800.00  -12.50%
(2)选择月份 获取环比数据
部门  对比年月 本月销售总量  上月销售总量 环比
营销一部 2006-07-01 300.00  NULL  无穷大
营销二部 2006-07-01 500.00  NULL  无穷大
营销三部 2006-08-01 800.00  NULL  无穷大
营销一部 2006-08-01 600.00  300.00  100.00%
营销二部 2006-08-01 800.00  500.00  60.00%
营销一部 2007-07-01 400.00  NULL  无穷大
营销二部 2007-07-01 800.00  NULL  无穷大
营销三部 2007-08-01 700.00  NULL  无穷大
营销一部 2008-07-01 600.00  NULL  无穷大
营销二部 2008-07-01 700.00  NULL  无穷大

二、代码:
1、创建表
CREATE TABLE SalesDetail(
ID int,   --序号
DepartName varchar(50), --部门
Sales decimal(10,2), --销售量
SalesDate Datetime --销售日期
)
2、插入测试数据
insert into SalesDetail(ID, DepartName, Sales, SalesDate)
select 1, '营销一部', 300, '2006-7-1'
UNION ALL select 2, '营销二部', 500, '2006-7-1'
UNION ALL select 3, '营销三部', 800, '2006-8-1'
UNION ALL select 4, '营销一部', 600, '2006-8-1'
UNION ALL select 5, '营销二部', 800, '2006-8-1'
UNION ALL select 6, '营销一部', 400, '2007-7-1'
UNION ALL select 7, '营销二部', 800, '2007-7-1'
UNION ALL select 8, '营销三部', 700, '2007-8-1'
UNION ALL select 9, '营销一部', 600, '2008-7-1'
UNION ALL select 10, '营销二部', 700, '2008-7-1'
3、实现SQL代码
//得到环比
select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, c.Sales as 本月销售总量, d.Sales as 上月销售总量, case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 环比 from SalesDetail c left join
(select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName) d
on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName
//得到同比
select c.DepartName as 部门, convert(varchar(10), c.SalesDate, 23) as 对比年月, c.Sales as 本月销售总量, d.Sales as 去年同期销售总量, case when d.Sales is null or d.Sales=0 then '无穷大' else cast(cast((isnull(c.Sales, 0)-isnull(d.Sales,0))*100/isnull(d.Sales, 0) as decimal(10,2)) as varchar(50))+'%' end as 同比 from SalesDetail c left join
(select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName) d
on c.SalesDate=d.SalesDate and c.DepartName=d.DepartName
4、SQL语句说明
//获取根据时间获取去年同期时间
select DateAdd(year, -1, SalesDate)
//获取根据时间获取上月时间
select DateAdd(month, -1, SalesDate)
//获取根据时间获取去年同期时间数据
select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(year, -1, b.SalesDate) and a.DepartName=b.DepartName
//获取根据时间获取上月时间数据
select a.DepartName as DepartName, a.Sales as Sales, a.SalesDate as lsSalesDate, b.SalesDate as SalesDate from SalesDetail a join SalesDetail b on a.SalesDate=DateAdd(month, -1, b.SalesDate) and a.DepartName=b.DepartName

SQL 求同比 环比相关推荐

  1. sql 按照天环比_SQL 求同比 环比

    一.要求 1.表结构如下: ID  DepartName(部门) Sales(销售量) SalesDate(销售日期) 1      营销一部       300              2006- ...

  2. sql 按照天环比_sql server 获取同比或环比

    一.要求 1.表结构如下: ID  DepartName(部门) Sales(销售量) SalesDate(销售日期) 1      营销一部       300              2006- ...

  3. sql 按照天环比_SQL 查询同比,环比

    一.要求 1.表结构如下: ID DepartName(部门) Sales(销售量) SalesDate(销售日期) 1 营销一部 300 2006-7-1 2 营销二部 500 2006-7-1 3 ...

  4. 使用 SQL 实现同比环比分析

    场景描述 在做数据分析时,经常会需要展示同比和环比的数据,可以通过 SQL 来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以及当月数据与去年同期 ...

  5. SQL计算日环比、周同比

    计算日环比.周同比 范例表格如下: 这是面试问到的一个问题,回来学习之后了解可以用这个函数: 计算日活的日环比,周同比: 代码如下: select date,dau,(dau-dau_1)/dau_1 ...

  6. mysql:一条sql语句统计环比、同比

    有一个业务需求 统计各个景区的入园人数.销售额以及入园人数和销售额的同比 以月度为例子同比为例:环比类似 思路分析:表a首先统计出当月的入园人数.销售额,表b统计出同期的入园人数.销售额(在a的基础上 ...

  7. sql 求同时在线人数(或者同时观看人数/同时浏览人数)

    模拟场景 例如登陆表 解决方案 1.思路: 把登陆时间.和登出时间看成一个动作,登录就+1人,登出就-1人.然后每个时间进行累加所有的人.即可看出每个时间点的在线人数. 2.代码 1.把登录时间.登出 ...

  8. asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02

    本文主要梳理<对比Excel,轻松学习SQL数据分析>对于自己有用的sql知识.这本书中的所有代码和函数均适用于my sql 8.0版本. SQL的基本功能数据定义(DDL)--对数据库, ...

  9. SQL计算月环比、月同比

    在工作的过程中,经常会使用到环比.同比,那关于如何用SQL去写环比和同比呢?非常简单,表自联以及interval函数,轻松实现. interval 1 month,环比 interval 1 year ...

  10. 大数据面试常见问题(一)——Oracle部分

    目录 1.Oracle分区类型 2.每种类型一般是用在什么场景下? 3.哪种分区类型使用的最多?为什么? 4.有没有用过组合分区?怎么搭配的? 5.分区表创建的基本语法是什么? 6.分区还有哪些不同的 ...

最新文章

  1. android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...
  2. java输出回文数原代码_JAVA怎么用循环语句编写一个判别是否为回文数的代码?...
  3. 拉肚子,不能吃东西的痛苦
  4. HTML转PDF(C#---itextsharp--zt
  5. V4L2框架分析学习
  6. Docker端口映射错误的解决方法
  7. UVA - 12338 Anti-Rhyme Pairs(后缀数组)
  8. [周赛第200场][Leetcode][第5477题][第5478题][JAVA][双指针][贪心]
  9. mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)
  10. oracle11g 密码大小写禁用及密码有效期限制
  11. (66)FPGA面试题-为parallel encoder编写Verilog代码,实现MUX4_1
  12. ios---NSNotificationCenter传值
  13. Netty权威指南——WebSocket协议开发
  14. 内外网安全文件摆渡如何实现自动化?
  15. gpu 虚拟服务器玩游戏,gpu云服务器可以玩游戏吗
  16. word 无法复制粘贴怎么办
  17. cvm java_移植JAVA虚拟机CVM到ARM平台(收藏)
  18. Cris 小哥哥的大数据项目之 HBase 模拟微博核心功能
  19. 2019计算机一级msoffice真题,【2019年整理】全国计算机一级MSOFFICE练习题带题解.pdf...
  20. 中控系统一键关机--读取串口数据并判断

热门文章

  1. 云计算认证系列:CKA认证
  2. mac HBuX连接夜神模拟器,连接真机
  3. 机器学习在各个领域的实际应用
  4. 2.1 ppt 用图形搞定 封面(2)
  5. 计算机2.0培训心得,信息技术应用能力提升培训心得体会两篇
  6. java代理模式租房案例
  7. [实战]200类鸟类细粒度图像分类
  8. 调查问卷设计的一般步骤与方法
  9. Arrays.sort()和lambda表达式
  10. 【中科院】分子生物学-朱玉贤第四版-笔记-第5-6讲 转录