婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE

SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE

熱門標簽:百度地圖標注改顏色 申請400電話在哪辦理流程 貴州房產智能外呼系統供應商 鎮江網路外呼系統供應商 臨沂智能電銷機器人加盟哪家好 小e電話機器人 一個導航軟件能用幾個地圖標注點 外呼運營商線路收費 電銷外呼有錄音系統有哪些

第一次看到這樣的SQL語句,看不懂,其中用到了下面的不常用的

聚集函數:GROUPING

用于匯總數據用的運算符: ROLLUP

SELECT 

CASE GROUPING(o.customerid) WHEN 0 THEN o.customerid ELSE  '(Total)' END 

AS AllCustomersSummary, 

CASE GROUPING(od.orderid) WHEN 0 THEN od.orderid ELSE -1 END 

AS IndividualCustomerSummary, 

SUM(od.quantity*od.unitprice) AS price 

FROM Orders o, [Order Details] od 

WHERE Year(o.orderdate) = 1998 AND od.orderid=o.orderid 

GROUP BY o.customerid, od.orderid WITH ROLLUP 

ORDER BY AllCustomersSummary 

查看SQL Server的幫助才發現,厲害啊,原來還有這么厲害的東西,不由的想起以前做水晶報表的時候,原來在SQL Server中就可以實現這樣的功能.

1.用 CUBE 匯總數據

CUBE 運算符生成的結果集是多維數據集。多維數據集是事實數據的擴展,事實數據即記錄個別事件的數據。擴展建立在用戶打算分析的列上。這些列被稱為維。多維數據集是一個結果集,其中包含了各維度的所有可能組合的交叉表格。

CUBE 運算符在 SELECT 語句的 GROUP BY 子句中指定。該語句的選擇列表應包含維度列和聚合函數表達式。GROUP BY 應指定維度列和關鍵字 WITH CUBE。結果集將包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎行中的聚合值。

例如,一個簡單的表 Inventory 中包含:

 

Item         Color        Quantity          -------------------- -------------------- -------------------------- Table        Blue         124            Table        Red         223            Chair        Blue         101            Chair        Red         210            

下列查詢返回的結果集中,將包含 ItemColor 的所有可能組合的 Quantity 小計:

 

SELECT Item, Color, SUM(Quantity) AS QtySumFROM InventoryGROUP BY Item, Color WITH CUBE

下面是結果集:

 

Item         Color        QtySum           -------------------- -------------------- -------------------------- Chair        Blue         101.00           Chair        Red         210.00           Chair        (null)        311.00           Table        Blue         124.00           Table        Red         223.00           Table        (null)        347.00           (null)        (null)        658.00           (null)        Blue         225.00           (null)        Red         433.00           

我們著重考查下列各行:

 

Chair        (null)        311.00           

這一行報告了 Item 維度中值為 Chair 的所有行的小計。對 Color 維度返回了 NULL 值,表示該行所報告的聚合包括 Color 維度為任意值的行。

 

Table        (null)        347.00           

這一行類似,但報告的是 Item 維度中值為 Table 的所有行的小計。

 

(null)        (null)        658.00           

這一行報告了多維數據集的總計。ItemColor 維度的值都是 NULL,表示兩個維度中的所有值都匯總在該行中。

 

(null)        Blue         225.00           (null)        Red         433.00           

這兩行報告了 Color 維度的小計。兩行中的 Item 維度值都是 NULL,表示聚合數據來自 Item 維度為任意值的行。

使用 GROUPING 區分空值

CUBE 操作所生成的空值帶來一個問題:如何區分 CUBE 操作所生成的 NULL 值和從實際數據中返回的 NULL 值?這個問題可用 GROUPING 函數解決。如果列中的值來自事實數據,則 GROUPING 函數返回 0;如果列中的值是 CUBE 操作所生成的 NULL,則返回 1。在 CUBE 操作中,所生成的 NULL 代表全體值。可將 SELECT 語句寫成使用 GROUPING 函數將所生成的 NULL 替換為字符串 ALL。因為事實數據中的 NULL 表明數據值未知,所以 SELECT 語句還可譯碼為返回字符串 UNKNOWN 替代來自事實數據的 NULL。例如:

 

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'      ELSE ISNULL(Item, 'UNKNOWN')    END AS Item,    CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'      ELSE ISNULL(Color, 'UNKNOWN')    END AS Color,    SUM(Quantity) AS QtySumFROM InventoryGROUP BY Item, Color WITH CUBE
多維數據集

CUBE 運算符可用于生成 n 維的多維數據集,即具有任意數目維度的多維數據集。只有一個維度的多維數據集可用于生成合計,例如:

 

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'      ELSE ISNULL(Item, 'UNKNOWN')    END AS Item,    SUM(Quantity) AS QtySumFROM InventoryGROUP BY Item WITH CUBEGO

此 SELECT 語句返回的結果集既顯示了 Item 中每個值的小計,也顯示了 Item 中所有值的總計:

 

Item         QtySum           -------------------- -------------------------- Chair        311.00           Table        347.00           ALL         658.00           

包含帶有許多維度的 CUBE 的 SELECT 語句可能生成很大的結果集,因為這些語句會為所有維度中值的所有組合生成行。這些大結果集包含的數據可能過多而不易于閱讀和理解。這個問題有一種解決辦法是將 SELECT 語句放在視圖中:

 

CREATE VIEW InvCube ASSELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'      ELSE ISNULL(Item, 'UNKNOWN')    END AS Item,    CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'      ELSE ISNULL(Color, 'UNKNOWN')    END AS Color,    SUM(Quantity) AS QtySumFROM InventoryGROUP BY Item, Color WITH CUBE

然后即可用該視圖來只查詢您感興趣的維度值:

 

SELECT *FROM InvCubeWHERE Item = 'Chair' AND Color = 'ALL'Item         Color        QtySum           -------------------- -------------------- -------------------------- Chair        ALL         311.00           (1 row(s) affected)



2.用 ROLLUP 匯總數據

在生成包含小計和合計的報表時,ROLLUP 運算符很有用。ROLLUP 運算符生成的結果集類似于 CUBE 運算符所生成的結果集。有關更多信息.

CUBE 和 ROLLUP 之間的區別在于:

  • CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。

  • ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。

例如,簡單表 Inventory 中包含:

 

Item         Color        Quantity          -------------------- -------------------- -------------------------- Table        Blue         124            Table        Red         223            Chair        Blue         101            Chair        Red         210            

下列查詢將生成小計報表:

 

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'      ELSE ISNULL(Item, 'UNKNOWN')    END AS Item,    CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'      ELSE ISNULL(Color, 'UNKNOWN')    END AS Color,    SUM(Quantity) AS QtySumFROM InventoryGROUP BY Item, Color WITH ROLLUPItem         Color        QtySum           -------------------- -------------------- -------------------------- Chair        Blue         101.00           Chair        Red         210.00           Chair        ALL         311.00           Table        Blue         124.00           Table        Red         223.00           Table        ALL         347.00           ALL         ALL         658.00           (7 row(s) affected)

如果查詢中的 ROLLUP 關鍵字更改為 CUBE,那么 CUBE 結果集與上述結果相同,只是在結果集的末尾還會返回下列兩行:

 

ALL         Blue         225.00           ALL         Red         433.00           

CUBE 操作為 ItemColor 中值的可能組合生成行。例如,CUBE 不僅報告與 Item 值 Chair 相組合的 Color 值的所有可能組合(Red、Blue 和 Red + Blue),而且報告與 Color 值 Red 相組合的 Item 值的所有可能組合(Chair、Table 和 Chair + Table)。

對于 GROUP BY 子句中右邊的列中的每個值,ROLLUP 操作并不報告左邊一列(或左邊各列)中值的所有可能組合。例如,ROLLUP 并不對每個 Color 值報告 Item 值的所有可能組合。

ROLLUP 操作的結果集具有類似于 COMPUTE BY 所返回結果集的功能;然而,ROLLUP 具有下列優點:

  • ROLLUP 返回單個結果集;COMPUTE BY 返回多個結果集,而多個結果集會增加應用程序代碼的復雜性。

  • ROLLUP 可以在服務器游標中使用;COMPUTE BY 不可以。

  • 有時,查詢優化器為 ROLLUP 生成的執行計劃比為 COMPUTE BY 生成的更為高效。

 

 

3.GROUPING

是一個聚合函數,它產生一個附加的列,當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為0。

僅在與包含 CUBE 或 ROLLUP 運算符的 GROUP BY 子句相聯系的選擇列表中才允許分組。

語法

GROUPING ( column_name )

參數

column_name

是 GROUP BY 子句中用于檢查 CUBE 或 ROLLUP 空值的列。

返回類型

int

注釋

分組用于區分由 CUBE 和 ROLLUP 返回的空值和標準的空值。作為CUBE 或 ROLLUP 操作結果返回的 NULL 是 NULL 的特殊應用。它在結果集內作為列的占位符,意思是"全體"。

示例

下面的示例將 royalty 的數值分組,并聚合 advance 的數值。GROUPING 函數應用于 royalty 列。

 

USE pubsSELECT royalty, SUM(advance) 'total advance',  GROUPING(royalty) 'grp'  FROM titles  GROUP BY royalty WITH ROLLUP

結果集在 royalty 下顯示兩個空值。第一個 NULL 代表從表中這一列得到的空值組。第二個 NULL 在 ROLLUP 操作所添加的匯總行中。匯總行顯示的是所有 royalty 組的 advance 合計數值,并且在 grp 列中用 1 標識。

下面是結果集:

 

royalty    total advance       grp ---------   ---------------------  ---NULL      NULL           0 10       57000.0000        0 12       2275.0000        0 14       4000.0000        0 16       7000.0000        0 24       25125.0000        0 NULL      95400.0000        1 


 

 

3.GROUPING

是一個聚合函數,它產生一個附加的列,當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為0。

僅在與包含 CUBE 或 ROLLUP 運算符的 GROUP BY 子句相聯系的選擇列表中才允許分組。

語法

GROUPING ( column_name )

參數

column_name

是 GROUP BY 子句中用于檢查 CUBE 或 ROLLUP 空值的列。

返回類型

int

注釋

分組用于區分由 CUBE 和 ROLLUP 返回的空值和標準的空值。作為CUBE 或 ROLLUP 操作結果返回的 NULL 是 NULL 的特殊應用。它在結果集內作為列的占位符,意思是"全體"。

示例

下面的示例將 royalty 的數值分組,并聚合 advance 的數值。GROUPING 函數應用于 royalty 列。

 

USE pubsSELECT royalty, SUM(advance) 'total advance',  GROUPING(royalty) 'grp'  FROM titles  GROUP BY royalty WITH ROLLUP

結果集在 royalty 下顯示兩個空值。第一個 NULL 代表從表中這一列得到的空值組。第二個 NULL 在 ROLLUP 操作所添加的匯總行中。匯總行顯示的是所有 royalty 組的 advance 合計數值,并且在 grp 列中用 1 標識。

下面是結果集:

 

royalty    total advance       grp ---------   ---------------------  ---NULL      NULL           0 10       57000.0000        0 12       2275.0000        0 14       4000.0000        0 16       7000.0000        0 24       25125.0000        0 NULL      95400.0000        1 


 

 

3.GROUPING

是一個聚合函數,它產生一個附加的列,當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為0。

僅在與包含 CUBE 或 ROLLUP 運算符的 GROUP BY 子句相聯系的選擇列表中才允許分組。

語法

GROUPING ( column_name )

參數

column_name

是 GROUP BY 子句中用于檢查 CUBE 或 ROLLUP 空值的列。

返回類型

int

注釋

分組用于區分由 CUBE 和 ROLLUP 返回的空值和標準的空值。作為CUBE 或 ROLLUP 操作結果返回的 NULL 是 NULL 的特殊應用。它在結果集內作為列的占位符,意思是"全體"。

示例

下面的示例將 royalty 的數值分組,并聚合 advance 的數值。GROUPING 函數應用于 royalty 列。

 

USE pubsSELECT royalty, SUM(advance) 'total advance',  GROUPING(royalty) 'grp'  FROM titles  GROUP BY royalty WITH ROLLUP

結果集在 royalty 下顯示兩個空值。第一個 NULL 代表從表中這一列得到的空值組。第二個 NULL 在 ROLLUP 操作所添加的匯總行中。匯總行顯示的是所有 royalty 組的 advance 合計數值,并且在 grp 列中用 1 標識。

下面是結果集:

 

royalty    total advance       grp ---------   ---------------------  ---NULL      NULL           0 10       57000.0000        0 12       2275.0000        0 14       4000.0000        0 16       7000.0000        0 24       25125.0000        0 NULL      95400.0000        1 

對GROUPING,ROLLUP,CUBE的介紹來自SQL Server2000中文版的幫助.

您可能感興趣的文章:
  • SQLSERVER中union,cube,rollup,cumpute運算符使用說明
  • SQLserver中cube:多維數據集實例詳解

標簽:保定 三明 嘉興 澳門 晉城 日照 合肥 延邊

巨人網絡通訊聲明:本文標題《SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE》,本文關鍵詞  SQLServer,中,匯總,功能,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE》相關的同類信息!
  • 本頁收集關于SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品久久毛片av大全日韩| 91麻豆精品91久久久久久清纯 | 国产综合色产在线精品| 午夜电影网亚洲视频| 亚洲自拍偷拍麻豆| 亚洲激情自拍视频| 亚洲色图视频网| 亚洲另类一区二区| 樱花影视一区二区| 亚洲电影一区二区三区| 日韩中文字幕一区二区三区| 日日摸夜夜添夜夜添精品视频| 午夜精品爽啪视频| 日韩高清中文字幕一区| 久久精品二区亚洲w码| 国产专区综合网| 丁香激情综合五月| 97久久久精品综合88久久| 91麻豆精品在线观看| 欧美日韩国产成人在线免费| 欧美精品第一页| 26uuu亚洲婷婷狠狠天堂| 亚洲国产精品99久久久久久久久| 亚洲欧美日韩国产综合| 一区二区三区.www| 精品在线播放免费| 成人深夜在线观看| 欧美日本视频在线| 中文字幕av免费专区久久| 一区二区三区四区五区视频在线观看 | 337p亚洲精品色噜噜噜| 欧美精品一区在线观看| 国产精品久久久久久妇女6080 | 国内成人自拍视频| 91色porny在线视频| 91精品国产综合久久香蕉的特点 | 欧美午夜视频网站| 久久久91精品国产一区二区精品| 亚洲激情自拍偷拍| 国产成人精品免费视频网站| 色综合天天综合网国产成人综合天 | 亚洲另类在线一区| 韩国v欧美v日本v亚洲v| 欧美午夜一区二区三区免费大片| 精品理论电影在线观看 | 8v天堂国产在线一区二区| 国产欧美视频一区二区三区| 亚洲一二三区在线观看| 国产精品一区二区视频| 欧美欧美午夜aⅴ在线观看| 国产精品初高中害羞小美女文| 日本91福利区| 欧洲精品一区二区三区在线观看| 久久久久久夜精品精品免费| 日日夜夜精品视频免费| 91精彩视频在线观看| 中文字幕av不卡| 国产成人av一区二区三区在线观看| 欧美精品成人一区二区三区四区| 日韩毛片在线免费观看| 从欧美一区二区三区| 精品va天堂亚洲国产| 石原莉奈在线亚洲三区| 欧美视频自拍偷拍| 一区二区三区精品视频| 91亚洲精品久久久蜜桃网站| 国产精品欧美久久久久无广告 | 1区2区3区国产精品| 国产一区999| 久久亚洲欧美国产精品乐播| 麻豆视频观看网址久久| 91精品免费在线观看| 日韩黄色小视频| 这里是久久伊人| 美日韩黄色大片| 精品三级在线观看| 精品夜夜嗨av一区二区三区| 91精品国产黑色紧身裤美女| 日本美女视频一区二区| 日韩一区二区精品在线观看| 久久国内精品视频| 久久麻豆一区二区| 大美女一区二区三区| 自拍av一区二区三区| 91福利国产精品| 日韩国产欧美在线视频| 91精品国产综合久久国产大片| 男女性色大片免费观看一区二区| 欧美高清dvd| 国产精品一区免费在线观看| 国产欧美日本一区视频| 99久久婷婷国产| 亚洲va天堂va国产va久| 日韩精品一区二区三区蜜臀| 久久97超碰国产精品超碰| 国产亚洲精品中文字幕| 99久久精品99国产精品| 日韩精品成人一区二区三区| 久久久久久97三级| 91久久精品一区二区三| 精品一二三四在线| 亚洲人成在线播放网站岛国| 91精品国产综合久久精品| 国产麻豆精品久久一二三| 亚洲欧美韩国综合色| 91精品在线观看入口| 成av人片一区二区| 日日摸夜夜添夜夜添精品视频| 久久久精品国产99久久精品芒果| 91欧美一区二区| 蜜臀91精品一区二区三区| 国产精品久久久久久久久免费樱桃| 欧美日韩精品一区二区| 国产麻豆视频精品| 亚洲一级二级在线| 久久精品日产第一区二区三区高清版| 色婷婷久久一区二区三区麻豆| 久久国产精品99久久久久久老狼| 一区二区三区日韩欧美| 亚洲精品在线观看网站| 在线一区二区观看| 国产91在线观看丝袜| 日韩 欧美一区二区三区| 中文字幕av一区二区三区高| 欧美一区二区三区在线视频| 91猫先生在线| 福利一区二区在线| 美女网站色91| 午夜久久久久久久久久一区二区| 国产精品私房写真福利视频| 精品欧美久久久| 在线播放中文一区| 欧美亚洲动漫制服丝袜| 色综合久久88色综合天天免费| 国产九色sp调教91| 日韩电影在线观看网站| 五月天亚洲精品| 亚洲五码中文字幕| 日韩美女啊v在线免费观看| 国产精品天美传媒沈樵| 久久精品视频在线看| 久久久精品日韩欧美| 精品国产免费人成电影在线观看四季 | 亚洲视频你懂的| 中文字幕亚洲一区二区av在线| 久久先锋影音av| 欧美经典一区二区| 国产女同性恋一区二区| 国产精品区一区二区三区| 亚洲国产岛国毛片在线| 日本一区二区三区久久久久久久久不 | 精品国产凹凸成av人导航| 欧美一级久久久| 欧美一级一级性生活免费录像| 91麻豆精品国产91久久久久 | 在线亚洲一区二区| 在线看不卡av| 欧美日韩五月天| 欧美一区二区三区小说| 欧美成人r级一区二区三区| 精品国精品国产| 国产欧美一区二区精品性色 | 一区二区三区在线看| 伊人一区二区三区| 奇米色一区二区三区四区| 韩国成人福利片在线播放| 国产精品18久久久久久久久| 成人午夜视频免费看| 欧美在线综合视频| 欧美一级日韩免费不卡| 久久亚洲捆绑美女| 国产精品麻豆99久久久久久| 亚洲永久免费av| 成人小视频免费观看| 色婷婷国产精品综合在线观看| 欧美日韩国产综合视频在线观看 | 亚洲男人的天堂在线aⅴ视频| 亚洲午夜久久久久久久久电影院| 日韩在线卡一卡二| 高清不卡一区二区在线| av在线不卡免费看| 欧美一区二区三区成人| 欧美国产乱子伦| 日韩1区2区日韩1区2区| 国产成人精品亚洲777人妖| 欧美午夜理伦三级在线观看| 精品成a人在线观看| 亚洲精品成人在线| 国产在线播放一区三区四| 波多野结衣亚洲一区| 欧美二区三区91| 综合亚洲深深色噜噜狠狠网站| 美女视频黄 久久| 一本高清dvd不卡在线观看| 欧美成人三级在线| 亚洲乱码国产乱码精品精可以看| 精品亚洲欧美一区| 91精品国产综合久久香蕉麻豆| 亚洲国产精品激情在线观看| 精品在线观看免费|