一段累計計算與折行並用的SQL

2021-05-17 10:31:09 字數 1646 閱讀 9797

今天應朋友要求寫了一段sql給大家分享一下。

資料庫裡有三條資料,它們分別是從其它表中提取或運算出來的,通過union合併成乙個三行資料。

select 0 qlje, 1028800 totmoeny from dual

union

select 20 qlje, 2500 totmoeny from dual

union

select 100 qlje, 300 totmoeny from dual

要求是要顯示成

累計 第一行值  第二行值 第三行值

120 1028800 2500 300

方法一: 分析

根據結果來看累計是三行的合計值,第一列,第二列,第三列分別對應第一行值、第二行值、第三行值

所以此sql中應用到了sum和折行的功能。

oracle的sum功能中有乙個按型別進行求合的功能。因為此sql需要新增第乙個輔助列ftype.他就是要為了求合。

折行功能如何實現呢?通常情況下折行是通過decode來實現的。但decode一定要指定他的唯一列,那麼這個唯一列會是什麼呢?

因此我對原來的sql中新增了第二個輔助列frow。

至此所有問題已解決。

以下例是詳細sql

select l_csum,

sum(totmoeny1) totmoeny1,

sum(totmoeny2) totmoeny2,

sum(totmoeny3) totmoeny3

from (select sum(qlje) over(partition by ftype order by ftype range unbounded preceding) l_csum,

decode(frow, 1, totmoeny) totmoeny1,

decode(frow, 2, totmoeny) totmoeny2,

decode(frow, 3, totmoeny) totmoeny3

from (select 0 qlje, 1028800 totmoeny, 1 ftype, 1 frow from dual

union

select 20 qlje, 2500 totmoeny, 1 ftype, 2 frow from dual

union

select 100 qlje, 300 totmoeny, 1 ftype, 3 frow from dual) ta) tb

group by l_csum

方法二:

更為簡單

select sum(qlje),

sum(decode(frow, 1, totmoeny)) totmoeny1,

sum(decode(frow, 2, totmoeny)) totmoeny2,

sum(decode(frow, 3, totmoeny)) totmoeny3

from (select 0 qlje, 1028800 totmoeny, 1 frow

from dual

union

select 20 qlje, 2500 totmoeny, 2 frow

from dual

union

select 100 qlje, 300 totmoeny, 3 frow from dual) ta

一段男孩與女孩的對話

男孩是個北漂的程式設計師,薪水微薄,但又想在北京買車 買房 女孩很漂亮,但家境不太好。男孩心疼她,平時在花錢方面不太約束女孩,一來怕委屈了女孩,二來是因為比較愛面子 怕別人 特別是女孩的朋友們 說自己是個白領還那麼寒酸。女孩花錢越來越沒有節制。男孩的生活負擔越來越重。女孩開始透支未來,甚至盯上了男孩...

一段男孩與女孩的對話

男孩是個北漂的程式設計師,薪水微薄,但又想在北京買車 買房 女孩很漂亮,但家境不太好。男孩心疼她,平時在花錢方面不太約束女孩,一來怕委屈了女孩,二來是因為比較愛面子 怕別人 特別是女孩的朋友們 說自己是個白領還那麼寒酸。女孩花錢越來越沒有節制。男孩的生活負擔越來越重。女孩開始透支未來,甚至盯上了男孩...

SQL例項 寫一段業績的SQL,HIVE端

select agent.corp name as 品牌名稱 agent.shop name as 門店名稱 ca.shop ca name as 對應ca agent.agent code as 經紀人系統號 agent.agent name as 經紀人姓名 nvl perfnum.perf n...