SQL 求同比 环比
一、要求
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 求同比 环比相关推荐
- sql 按照天环比_SQL 求同比 环比
一.要求 1.表结构如下: ID DepartName(部门) Sales(销售量) SalesDate(销售日期) 1 营销一部 300 2006- ...
- sql 按照天环比_sql server 获取同比或环比
一.要求 1.表结构如下: ID DepartName(部门) Sales(销售量) SalesDate(销售日期) 1 营销一部 300 2006- ...
- sql 按照天环比_SQL 查询同比,环比
一.要求 1.表结构如下: ID DepartName(部门) Sales(销售量) SalesDate(销售日期) 1 营销一部 300 2006-7-1 2 营销二部 500 2006-7-1 3 ...
- 使用 SQL 实现同比环比分析
场景描述 在做数据分析时,经常会需要展示同比和环比的数据,可以通过 SQL 来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以及当月数据与去年同期 ...
- SQL计算日环比、周同比
计算日环比.周同比 范例表格如下: 这是面试问到的一个问题,回来学习之后了解可以用这个函数: 计算日活的日环比,周同比: 代码如下: select date,dau,(dau-dau_1)/dau_1 ...
- mysql:一条sql语句统计环比、同比
有一个业务需求 统计各个景区的入园人数.销售额以及入园人数和销售额的同比 以月度为例子同比为例:环比类似 思路分析:表a首先统计出当月的入园人数.销售额,表b统计出同期的入园人数.销售额(在a的基础上 ...
- sql 求同时在线人数(或者同时观看人数/同时浏览人数)
模拟场景 例如登陆表 解决方案 1.思路: 把登陆时间.和登出时间看成一个动作,登录就+1人,登出就-1人.然后每个时间进行累加所有的人.即可看出每个时间点的在线人数. 2.代码 1.把登录时间.登出 ...
- asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02
本文主要梳理<对比Excel,轻松学习SQL数据分析>对于自己有用的sql知识.这本书中的所有代码和函数均适用于my sql 8.0版本. SQL的基本功能数据定义(DDL)--对数据库, ...
- SQL计算月环比、月同比
在工作的过程中,经常会使用到环比.同比,那关于如何用SQL去写环比和同比呢?非常简单,表自联以及interval函数,轻松实现. interval 1 month,环比 interval 1 year ...
- 大数据面试常见问题(一)——Oracle部分
目录 1.Oracle分区类型 2.每种类型一般是用在什么场景下? 3.哪种分区类型使用的最多?为什么? 4.有没有用过组合分区?怎么搭配的? 5.分区表创建的基本语法是什么? 6.分区还有哪些不同的 ...
最新文章
- android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...
- java输出回文数原代码_JAVA怎么用循环语句编写一个判别是否为回文数的代码?...
- 拉肚子,不能吃东西的痛苦
- HTML转PDF(C#---itextsharp--zt
- V4L2框架分析学习
- Docker端口映射错误的解决方法
- UVA - 12338 Anti-Rhyme Pairs(后缀数组)
- [周赛第200场][Leetcode][第5477题][第5478题][JAVA][双指针][贪心]
- mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)
- oracle11g 密码大小写禁用及密码有效期限制
- (66)FPGA面试题-为parallel encoder编写Verilog代码,实现MUX4_1
- ios---NSNotificationCenter传值
- Netty权威指南——WebSocket协议开发
- 内外网安全文件摆渡如何实现自动化?
- gpu 虚拟服务器玩游戏,gpu云服务器可以玩游戏吗
- word 无法复制粘贴怎么办
- cvm java_移植JAVA虚拟机CVM到ARM平台(收藏)
- Cris 小哥哥的大数据项目之 HBase 模拟微博核心功能
- 2019计算机一级msoffice真题,【2019年整理】全国计算机一级MSOFFICE练习题带题解.pdf...
- 中控系统一键关机--读取串口数据并判断