計算同環比的儲存過程,裡面有行轉列和時間前移

2021-09-10 04:23:48 字數 1680 閱讀 6356

首先對當月資料進行統計,group by 對不統計字段分組,然後sum統計數值

select 

`tjyf`, `gddwbm`,`yhbh`,

sum(`byydl`) byydl, --------統計資料

sum(`bydf`) bydf --------

from

`tm_yx_khtz_ydtjfx`

where `yhbh` =

(select

yhbh

from

`tm_yx_khtz_jbxx`

where yhmc = '李四')

and (

tjyf = '201002'

or `tjyf` = date_format(

date_sub(concat('201002', '01'), interval 1 year), --------這裡是往前一年

'%y%m'

) or `tjyf` = date_format(

date_sub(concat('201002', '01'), interval 1 month), --------這裡是往前乙個月

'%y%m'))

group by

`tjyf`,

`gddwbm`,

`yhbh` --------對不統計字段進行分組操作

然後把上面字段作為子查詢,進行   列轉行   操作,貼出兩個核心sql,把行相當於做迴圈,用判斷把列資料轉為行

sum(

case

r.tjyf

when 201002 -----------------這裡判斷時間是否是本月

then r.byydl -----------------符合條件,放置資料

else null -----------------不然置空

end) current_byydl,

sum(

case

r.tjyf

when date_format(

date_sub(

str_to_date('20100201', '%y%m%d'),

interval 1 year -----------------這裡判斷時間是否是減去一年的

),'%y%m'

)then r.bydf -----------------符合條件,放置資料

else null -----------------不然置空

end)

最後就把資料進行計算即可,然後丟給前台做處理

((s.current_byydl - s.ring_byydl) / s.ring_byydl) * 100 ring_byydl_rate,

((s.current_byydl - s.same_byydl) / s.same_byydl) * 100 same_byydl_rate,

同比 ,(今年值 - 去年值) / 去年值 * 100%

環比 ,(今年之 - 上月值) / 上月值 * 100%

5 4 2 1 SSAS 建立計算 同環比

建立計算 同環比 1 計算當期 上期 同期成員值 1.1 新建計算 1.2 輸入計算成員名 1.3 輸入表示式如下 當期 date 年 月 日 currentmember measures pay amount 上期 date 年 月 日 currentmember.prevmember measu...

Hive計算絕對值同環比

什麼是絕對值同比 什麼是絕對值環比 資料集準備 同比計算 環比計算 本期資料 同期資料 同期資料 例 2021年1月1日的gmv 2020年1月1日的gmv 2020年1月1日的gmv 本期資料 上期資料 上期資料 例 2021年2月2日的gmv 2020年2月1日的gmv 2020年2月1日的gm...

儲存過程裡面使用in變數列表異常的處理

在寫乙個儲存過程的時候,由於需要用到類似 select id,name from tablename where id in id1,id2,id3.的查詢語句,同時括號裡面的變數是拼接得到的,當時沒有多想,直接將儲存過程寫成類似select id,name from tablename where...