同期及上期数据对比处理示例.sql
CREATE TABLE Employee(
ID int, --雇员编号(主键)
Name nvarchar(10), --雇员名称
Dept nvarchar(10)) --所属部门
INSERT Employee SELECT 1,N'张三',N'大客户部'
UNION ALL SELECT 2,N'李四',N'大客户部'
UNION ALL SELECT 3,N'王五',N'销售一部'
--费用表
CREATE TABLE Expenses(
EmployeeID int, --雇员编号
Date Datetime, --发生日期
Expenses nvarchar(10), --指标名称
[Money] decimal(10,2)) --发生金额
INSERT Expenses SELECT 1,'2004-01-01',N'销售',100
UNION ALL SELECT 1,'2004-01-02',N'销售',150
UNION ALL SELECT 1,'2004-12-01',N'销售',200
UNION ALL SELECT 1,'2005-01-10',N'销售', 80
UNION ALL SELECT 1,'2005-01-15',N'销售', 90
UNION ALL SELECT 1,'2005-01-21',N'成本', 8
UNION ALL SELECT 2,'2004-12-01',N'成本', 2
UNION ALL SELECT 2,'2005-01-10',N'销售', 10
UNION ALL SELECT 2,'2005-01-15',N'销售', 40
UNION ALL SELECT 2,'2005-01-21',N'成本', 8
UNION ALL SELECT 3,'2004-01-01',N'销售',200
UNION ALL SELECT 3,'2004-12-10',N'销售', 80
UNION ALL SELECT 3,'2005-01-15',N'销售', 90
UNION ALL SELECT 3,'2005-01-21',N'销售', 8
GO
--统计
DECLARE @Period char(6)
SET @Period='200501' --统计的年月
--统计处理
DECLARE @Last_Period char(6),@Previous_Period char(6)
SELECT @Last_Period=CONVERT(char(6),DATEADD(Year,-1,@Period+'01'),112),
@Previous_Period=CONVERT(char(6),DATEADD(Month,-1,@Period+'01'),112)
SELECT Dept,Expenses,Name,
C_Money,
L_Money,
L_UP=C_Money-L_Money,
L_Prec=CASE
WHEN L_Money=0 THEN '----'
ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-L_Money) as int)+2,1)
+CAST(CAST(ABS(C_Money-L_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'
END,
P_Money,
P_UP=C_Money-P_Money,
P_Prec=CASE
WHEN P_Money=0 THEN '----'
ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-P_Money) as int)+2,1)
+CAST(CAST(ABS(C_Money-P_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'
END
FROM(
SELECT a.Dept,b.Expenses,
Name=CASE WHEN GROUPING(Name)=1 THEN '<合计>' ELSE a.Name END,
C_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Period THEN b.[Money] END),0),
L_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Last_Period THEN b.[Money] END),0),
P_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Previous_Period THEN b.[Money] END),0)
FROM Employee a,Expenses b
WHERE a.ID=b.EmployeeID
AND CONVERT(char(6),b.Date,112) IN(@Last_Period,@Previous_Period,@Period)
GROUP BY a.Dept,b.Expenses,a.ID,a.Name WITH ROLLUP
HAVING (GROUPING(a.Name)=0 OR GROUPING(a.ID)=1)
AND (GROUPING(a.ID)=0 OR GROUPING(b.Expenses)=0))a
/*--结果
Dept Expenses Name C_Money L_Money L_UP L_Prec P_Money P_UP P_Prec
------- --------- -------- --------- -------- -------- -------- -------- -------- ------
大客户部 成本 张三 8.00 .00 8.00 ---- .00 8.00 ----
大客户部 成本 李四 8.00 .00 8.00 ---- 2.00 6.00 ↑300.00%
大客户部 成本 <合计> 16.00 .00 16.00 ---- 2.00 14.00 ↑700.00%
大客户部 销售 张三 170.00 250.00 -80.00 ↓32.00% 200.00 -30.00 ↓15.00%
大客户部 销售 李四 50.00 .00 50.00 ---- .00 50.00 ----
大客户部 销售 <合计> 220.00 250.00 -30.00 ↓12.00% 200.00 20.00 ↑10.00%
销售一部 销售 王五 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%
销售一部 销售 <合计> 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%
--*/
转载于:https://www.cnblogs.com/shihao/archive/2012/05/19/2508639.html
同期及上期数据对比处理示例.sql相关推荐
- 同期及上期数据对比显示
--雇员数据 CREATE TABLE Employee( ID int, --雇员编号(主键) Name nvarchar(10), --雇员名称 Dept nvarc ...
- oracle 两表两列数据对比_【SQL】根据两列信息,整合两张表数据
两张表数据如下: --2017年 id college score A001 北京大学 670 A002 中国人民大学 646 A003 清华大学 664 A003 清华大学 (定向) ...
- oracle取同期和上期,取同期和上期数据
SELECT T.OrderDate,T.数量,s.数量,a.数量 from ( SELECT OrderDate,SUM(数量) AS 数量 FROM OrderTable )t left joi ...
- 两年数据对比柱形图_同期数据对比,你会做这样特殊的柱形图吗?趋势、差异值一目了然...
2019年即将结束,各公司部门也开始进行年度数据回顾.比如2018和2019年各季度同期数据对比.一般情况下,做两组数据对比,许多同学都是用普通的柱形图来表示.用各季度作为横坐标,然后同期对比的季度进 ...
- web项目实践1-iwebshop项目-页面初始化数据与sql数据库中的数据对比
当拿到项目后首先应该根据页面初始化数据与SQL数据库中的查询数据进行比对,进行初始化界面测试 初始化页面数据加载分析 1.查询首页的顶级分类 select * from iwebshop_catego ...
- Sql表结构及数据对比工具
1 目的与意义 现管理技术小团队做zw项目.在上线时经常遇到sql未执行的漏洞,导致线上环境反复出现测试环境未出现过的bug. 为解决以上问题,对于由于sql导致的环境迁移的bug,需从配置数据.表结 ...
- 建议收藏 | 可实操,数据中台选型示例
在了解清楚了选择数据中台时应关注的内容后,CTO/CIO可以借鉴以下数据中台选型示例,企业选购合适的数据中台. 01 项目背景 数字化时代,数据已经成为企业的战略级资产.某集团把建设数字化转型作为重要 ...
- 元数据与数据治理|Spark SQL结构化数据分析(第六篇)
数据科学家们早已熟悉的R和Pandas等传统数据分析框架 虽然提供了直观易用的API,却局限于单机,无法覆盖分布式大数据场景.在Spark1.3.0以Spark SQL原有的SchemaRDD为蓝本, ...
- 爬虫找工作要掌握什么_数据分析师要掌握SQL到什么程度?
是新朋友吗?记得先点蓝字关注我哦- 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 数据分析 人工智能+Python | 人工智能+物联网 很多人入门学习数据分析,往往第一时间 ...
最新文章
- pip install -r requirement.txt 后 提示No such file or directory: ‘requirements.txt‘
- oracle秘钥到期,Oracle – 更新加入 – 非密钥保留表
- WordPress添加背景音乐
- Centos 6.2 单网卡安装pptpd 经验
- php中mysql数据库集群,MySQL集群
- JAVA 封装的简单运用
- d3 + geojson in node
- 第二季-专题8-不用内存怎么行
- macOS Monterey 12.0 Beta版 With Clover 5136 and OC 0.7.0 and PE 三EFI分区原版黑苹果镜像
- 12864液晶模块的详细使用
- 非华为电脑安装华为电脑管家11的方法,华为应用商店和华为浏览器电脑版
- 数据结构--最小生成树详解
- 【解决办法】adobe audition打不开 显示MSVCR71.dll丢失
- 信而泰 X-Snapper测试系统,助力家庭路由器IPv6支持度测试
- php 在服务器运行不起,PHP Cookies在localhost上运行良好,但在实时服务器上不起作用...
- BugKu CTF(杂项篇MISC)---哥哥的秘密
- EFF 测试 Privacy Badger,禁止第三方跟踪
- python读Excel数据成numpy数组
- 【大数据】9大实战项目解决你所有烦恼(写论文、找工作)
- Z-Libary最新地址检测,再也不用担心找不到ZLibary了
热门文章
- 8 种最坑的 SQL 错误用法,你有没有踩过坑?
- 面试题热个身:5 亿整数的大文件,来排个序?
- 快看过来,傻瓜都能理解的 Netty 模型架构
- Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析
- Docker inspect 命令
- 超键、候选键、主键、外键、联合主键、复合主键
- 常见拒绝服务型攻击原理及行为特征
- 2019中国大学生程序设计竞赛(CCPC)-网络选拔赛-第七题Shuffle Card
- java pdf添加图片_java实现在pdf模板的指定位置插入图片
- 学机械可以转计算机吗,本人合工大车辆工程大一新生,但是机械类前景都不太好,我要不要转计算机,求教?...