今天應朋友要求寫了一段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...