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 求同比 環比
一、要求1、表結構如下:ID DepartName(部門) Sales(銷售量) SalesDate(銷售日期)1 營銷一部 300 2006-7-1 2 營銷二部 500 2
在論壇中出現的比較難的sql問題:31(row_number函式+子查詢 月環比計算)
最近,在論壇中,遇到了不少比較難的sql問題,雖然自己都能解決,但發現過幾天后,就記不起來了,也忘記解決的方法了。 所以,覺得有必要記錄下來,這樣以後再次碰到這類問題,也能從中獲取解答的思路。
mysql 循環比對數據
mysql 循環比對數據#!/bin/bashdir_1="/tmp/check/177/*"log_dir="/tmp/check/"mysql_1="mysql - -p-h -P3336"db_1=`ls -1 $dir_1`for db_1 in $db_1;do echo "正在執行檢查"${
凈利潤滾動環比增長率
href 例如 dao tar ref get targe 去年 AR 滾動一般是指過去1年為周期來對比。例如今年第一季度凈利潤滾動環比增長率=((今年第一季度凈利率+去年第四季度凈利率+去年第三季度凈利率+去年第二季度凈利率)-(去年第四季度凈利率+去年第三季度凈利率+去
dax-自定義周做同比和環比
都沒有 切分 filter 圖片 text col 哈哈 銷售 calculate 中國式報表:公司要指定財務月做月度周期,然後還要切分周,要做同比和環比。查了一些老師的文章和資料,發覺都沒有現在要求的這麽復雜。於是只好用很笨的辦法去寫了公式,至少看起來是需求的樣子了,後續
統計--------同比、環比、PV、UV、VV、IP
同比、環比 同比增長率=(本期數-同期數)÷同期數×100% 環比增長速度=(本期數-上期數)÷上期數×100% 同比發展速度,一般指是指本期發展水平與上年同期發展水平對比,而達到的相對發展速度。 環比發展速度,一般是指報告期水平與前一時期水平之比,表明現象逐期的發展速度。 PV、U
派派月度環比增長明顯 創新互動玩法引關注
進入下半年,全網各領域廠商們又開始新一輪出擊。不同的平臺玩法也不盡相同,在產品優化、使用者運營、內容運營上都各顯其招,企圖通過多種玩法吸引使用者並加強互動,獲得使用者資料的顯著增長。在數以千計的APP中哪些平臺的招數更為有效,最新出爐的Analysys易觀“2018年9月移動App TOP1000”排行榜或許
派派月度環比增長明顯 創新互動玩法引關註
不可 很多 調查 廠商 聊天功能 手遊 優化 時間 不同 進入下半年,全網各領域廠商們又開始新一輪出擊。不同的平臺玩法也不盡相同,在產品優化、用戶運營、內容運營上都各顯其招,企圖通過多種玩法吸引用戶並加強互動,獲得用戶數據的顯著增長。在數以千計的APP中哪些平臺的招數更為有
【鏈塔DApp週報】BDI指數上漲52%,以太坊DApp交易額環比增長38%
時間:11月26日 根據鏈塔DApp資料分析,11月19日至25日,鏈塔DApp行業指數BDI以225點結束,環比上漲51.51%。 以太坊DApp總數為1166個,環比增加17個;一週交易額為8.09萬ETH,環比增長38.05%;一週累計總日活為5.83萬人,環比下降0.85%。 EOS DAp
增長或下降的百分比計算以及同比環比概念
例子: 今年產量為a, 去年產量為b, 問 今年比去年增長(減少)了百分之幾? 答案: (今年 - 去年) / 去年, 為正是增長,為負是減少 進一步, 問現在比原來多(少)原來的百分之幾的做法:100%×(現在-原來)/原來 問現在
同比增長、環比增長是如何計算的?
1.同比增長 和上一時期、上一年度或歷史相比的增長(幅度)。 同比增長計算公式 同比增長率=(本期數-同期數)÷同期數 例子 比如說去年3月的產值100萬,今年3月的產值300萬,
psql計算環比和同比
\c dw; –連線到資料庫 drop table if exists stg.d_mars_rate_hb_1 ; create table if not exists stg.d_mars_rate_hb_1( category_1 TEXT,
R語言中同比增長和環比增長
同比增長:與上個週期的同一天或者同一個季度,進行對比。 環比增長:與同個週期的不同天或者不同季度,進行對比。 比如,本週星期三與上週星期三進行比較,就是同比, 本週星期三與本週星期二進行比較,就是環比。
用分析服務SSAS解決佔比、同比和環比問題
本文將介紹用分析服務SSAS如何解決佔比、同比和環比三個指標。 首先理解一下這三個指標的基本概念: 佔比是指當前成員的值與該成員父級的值的比率,意思是在總數中所佔的比重,比如某水果商店總銷售額為14,其中蘋果的銷售額為2,佔比就是14.3%。 同比是指在一個期間內的值與以前
oracle求同比,環比函式 LAG和LEAD
CREATE TABLE salaryByMonth ( employeeNo varchar2(20), yearMonth varchar2(6), salary number ) ; insert into SALARYBYMONTH (EMPLOYEENO, YEARMONTH, SALAR
基於統計的預警:同環比預警實現深度剖析
一、UAV預警功能簡介 UAV.Monitor提供了對全維監控指標的預警功能,各型別的監控指標均可配置預警策略,當預警策略被觸發後,可通過郵件、HTTP呼叫等方式進行通知報警,並會根據預警時間頻率等對報警動作進行壓制。 預警分為流式預警、統計預警以及混合預警三種。 流式預警會對採集到的每一個監控指標資料進行
sql server 循環插入列
sql server drop table #tempselect name,IDENTITY(int,1,1) as idinto #tempfrom syscolumnswhere id =(select id from sysobjects where xtype=‘u‘ and name =
Oracle筆記4-pl/sql-分支/循環/遊標/異常/存儲/調用/觸發器
eal lar 數據交互 實現 after table while gin base 一.pl/sql(Procedure Language/SQL)編程語言 1.概念 PL/SQL是Oracle數據庫對SQL語句的擴展。在普通SQL語句的使用上增加了編程語言的特點,所以P
PL/SQL loop循環詳解
重新 包含 proc out 語法 pre 操作 bool output 在PL/SQL中可以使用LOOP語句對數據進行循環處理,利用該語句可以循環執行指定的語句序列。常用的LOOP循環語句包含3種形式:基本的LOOP、WHILE...LOOP和FOR...LOOP。
SQL SERVER循環遍歷(普通循環和遊標循環)
into 變量 alloc lar -1 記錄 gin pda 普通 1、首先需要一個測試表數據Student 2、普通循環 1)循環5次來修改學生表信息 --循環遍歷修改記錄--declare @i int set @i=0while @i<5b