日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

oracle利用sql語句實現(xiàn)分組小計(grouping,group by ,rollup)

作者:code_std 更新時間: 2022-08-13 編程語言

今天遇到一個需求,要做一個報表,格式如下:
在這里插入圖片描述
原本想直接查詢出來,然后用程序把數(shù)據(jù)整理一下展示,然后想到了oracle查詢語句的grouping,如果直接查出來就是這樣的,之后在對數(shù)據(jù)加工后展示就更簡單了。于是有了下面的簡單測試:

創(chuàng)建對應(yīng)的數(shù)據(jù)

在這里插入圖片描述

利用rollup 分組

如下圖,group by rollup(a,b) 和 group by (a,b) 分組出來的結(jié)果,明顯不同。
group by rollup(a,b) 分組實際就是先將 shi1 進行 group by (a,b) 分組,然后再將分組出來的結(jié)果進行 group by a 分組。
這時候分組出來的結(jié)果已經(jīng)和我想的帶小計的結(jié)果差不多了,只需要將 B 列為空的 A 列換成小計即可。
在這里插入圖片描述

利用 grouping,找出替換規(guī)律

通過下圖結(jié)果,可得出一個結(jié)論,如果利用 grouping(xx) 來顯示,則只要被 group by 分組過的列都會顯示 0,反之顯示 1;
例如: 1 2 兩行,grouping(A) 和 grouping(B) 由于被 group by rollup(a,b) 分組時,先按照 group by (a,b) 分組,后按照 group by a 分組,所以 1 2 兩行的 grouping(A) 和 grouping(B) 顯示為 0。同樣第三行的 grouping(A) 被按照 group by a 分組過,所以也顯示為 0, 第三行的 grouping(B) 列因為未被分組過,所以顯示為1。
在這里插入圖片描述

利用decode,達成最終結(jié)果

在這里插入圖片描述

原文鏈接:https://blog.csdn.net/qq_26330543/article/details/126048534

欄目分類
最近更新