第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)
生活随笔
收集整理的這篇文章主要介紹了
第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
UNION 等集合操作符: UNION 等以第一個 SELECT ?的 列明 作為 整個結果集的列明,整個結果集 唯一認可的 唯一邏輯處理階段 是 ORDER BY? 這個意思是說 只有 ORDER BY 是對整個結果集作用的,其它都操作都作用在 UINON 兩側的 子集合中。 EXCEPT 操作符也是 提出了重復值的 此外,它認為兩個 null 值是相等的, 而 NOT EXISTS 認為兩個 null 值不相等, 集合操作符的 優先級是 INTERSECT 最大,其它都一樣 CTE 遞歸 是個 重點, 分為 單個 定位點成員,單個遞歸成員,多個定位點,多個遞歸成員 1.?單個 定位點成員,單個遞歸成員 //todo 2.?多個定位點,多個遞歸成員 ? // todo 特別注意 只有一個維度去觀看的時候,WITH CUBE 或者 WITH ROLLUP 的結果是一樣的。 而下面 例子中的 WITH CUBE 或者 WITH ROLLUP 語句都會被 GROUP BY 后面的 CUBE(col1,col2) 或者 ROLLUP(col1,col2) 所替代,因為這種更加符合 ISO 標準些 IF?object_id('dbo.Inventory','U')?IS?NOT?NULL? DROP?TABLE?dbo.Inventory? GO CREATE?TABLE?Inventory( Item?varchar(5), Color?char(4), Qty?int ) INSERT?INTO?dbo.Inventory? VALUES('桌子','藍色',2), ('桌子','紅色',1), ('桌子','藍色',3), ('椅子','藍色',4), ('椅子','紅色',6), ('椅子','紅色',5) select?Item,Color,SUM(Qty)?AS?Sum_Qty?from?dbo.Inventory?GROUP?BY?Item,Color WITH CUBE ?-- ?Group by Item,Color WITH CUBE 也可以替換為 Group by CUBE(Item,Color) 以下同理 select?Item,Color,SUM(Qty)?AS?Sum_Qty?from?dbo.Inventory?GROUP?BY?Item,Color?with?rollup 重點: 區分 空值與匯總值 使用 Grouping(Item) 或者 Grouping(Color) 函數 去區分 當 Grouping 函數返回 1 時候證明是匯總的,否則 就是真正的 null 值 1. Cube ------======--- select? CASE?WHEN?Grouping(Item)?=?1? Then?'匯總'?ELSE?ISNULL(Item,'未知')? End?as?Item, CASE?WHEN?Grouping(Color)?=?1?Then?'匯總'?ELSE?ISNULL(Color,'未知')?End?as?Item, SUM(Qty)?AS?Sum_Qty? from?dbo.Inventory?GROUP?BY?Item,Color?with?cube 2. 對于 ROLLUP ------====== select? CASE?WHEN?Grouping(Item)?=?1? Then?'匯總'?ELSE?ISNULL(Item,'未知')? End?as?Item, CASE?WHEN?Grouping(Color)?=?1?Then?'匯總'?ELSE?ISNULL(Color,'未知')?End?as?Item, SUM(Qty)?AS?Sum_Qty? from?dbo.Inventory?GROUP?BY?Item,Color?with?rollup 3.怎樣返回指定維度的 匯總: 1。 使用派生表 然后 對派生表 做 where 條件篩選 即 把上面匯總的 select 查詢語句做成一個 子查詢數據集 然后從這個 數據集中 篩選 Item is not null and Color is null 諸如此類的。 2. ? 使用GROUPING SETS 指定僅需要獲取所需的分組 不帶 null, null 這種情況的: 帶上 null , null 這種情況的?
?
UNION 等集合操作符: UNION 等以第一個 SELECT ?的 列明 作為 整個結果集的列明,整個結果集 唯一認可的 唯一邏輯處理階段 是 ORDER BY? 這個意思是說 只有 ORDER BY 是對整個結果集作用的,其它都操作都作用在 UINON 兩側的 子集合中。 EXCEPT 操作符也是 提出了重復值的 此外,它認為兩個 null 值是相等的, 而 NOT EXISTS 認為兩個 null 值不相等, 集合操作符的 優先級是 INTERSECT 最大,其它都一樣 CTE 遞歸 是個 重點, 分為 單個 定位點成員,單個遞歸成員,多個定位點,多個遞歸成員 1.?單個 定位點成員,單個遞歸成員 //todo 2.?多個定位點,多個遞歸成員 ? // todo 特別注意 只有一個維度去觀看的時候,WITH CUBE 或者 WITH ROLLUP 的結果是一樣的。 而下面 例子中的 WITH CUBE 或者 WITH ROLLUP 語句都會被 GROUP BY 后面的 CUBE(col1,col2) 或者 ROLLUP(col1,col2) 所替代,因為這種更加符合 ISO 標準些 IF?object_id('dbo.Inventory','U')?IS?NOT?NULL? DROP?TABLE?dbo.Inventory? GO CREATE?TABLE?Inventory( Item?varchar(5), Color?char(4), Qty?int ) INSERT?INTO?dbo.Inventory? VALUES('桌子','藍色',2), ('桌子','紅色',1), ('桌子','藍色',3), ('椅子','藍色',4), ('椅子','紅色',6), ('椅子','紅色',5) select?Item,Color,SUM(Qty)?AS?Sum_Qty?from?dbo.Inventory?GROUP?BY?Item,Color WITH CUBE ?-- ?Group by Item,Color WITH CUBE 也可以替換為 Group by CUBE(Item,Color) 以下同理 select?Item,Color,SUM(Qty)?AS?Sum_Qty?from?dbo.Inventory?GROUP?BY?Item,Color?with?rollup 重點: 區分 空值與匯總值 使用 Grouping(Item) 或者 Grouping(Color) 函數 去區分 當 Grouping 函數返回 1 時候證明是匯總的,否則 就是真正的 null 值 1. Cube ------======--- select? CASE?WHEN?Grouping(Item)?=?1? Then?'匯總'?ELSE?ISNULL(Item,'未知')? End?as?Item, CASE?WHEN?Grouping(Color)?=?1?Then?'匯總'?ELSE?ISNULL(Color,'未知')?End?as?Item, SUM(Qty)?AS?Sum_Qty? from?dbo.Inventory?GROUP?BY?Item,Color?with?cube 2. 對于 ROLLUP ------====== select? CASE?WHEN?Grouping(Item)?=?1? Then?'匯總'?ELSE?ISNULL(Item,'未知')? End?as?Item, CASE?WHEN?Grouping(Color)?=?1?Then?'匯總'?ELSE?ISNULL(Color,'未知')?End?as?Item, SUM(Qty)?AS?Sum_Qty? from?dbo.Inventory?GROUP?BY?Item,Color?with?rollup 3.怎樣返回指定維度的 匯總: 1。 使用派生表 然后 對派生表 做 where 條件篩選 即 把上面匯總的 select 查詢語句做成一個 子查詢數據集 然后從這個 數據集中 篩選 Item is not null and Color is null 諸如此類的。 2. ? 使用GROUPING SETS 指定僅需要獲取所需的分組 不帶 null, null 這種情況的: 帶上 null , null 這種情況的??
轉載于:https://www.cnblogs.com/Frank99/p/5319655.html
總結
以上是生活随笔為你收集整理的第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拍拍贷靠谱吗?毕业以来都在旅游行业,以为
- 下一篇: 达到PS4游戏机的水平需要什么级别的显卡