濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > SQLServer 數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總完全解析(WITH ROLLUP)

SQLServer 數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總完全解析(WITH ROLLUP)

熱門(mén)標(biāo)簽:百度地圖標(biāo)注改顏色 貴州房產(chǎn)智能外呼系統(tǒng)供應(yīng)商 鎮(zhèn)江網(wǎng)路外呼系統(tǒng)供應(yīng)商 申請(qǐng)400電話在哪辦理流程 一個(gè)導(dǎo)航軟件能用幾個(gè)地圖標(biāo)注點(diǎn) 臨沂智能電銷機(jī)器人加盟哪家好 外呼運(yùn)營(yíng)商線路收費(fèi) 小e電話機(jī)器人 電銷外呼有錄音系統(tǒng)有哪些

現(xiàn)有表A,內(nèi)容如下:

編碼  倉(cāng)庫(kù)  數(shù)量
      01   A    6
      01   B    7
      02   A    8
      02   B    9

現(xiàn)在想按編碼查詢出這種格式:

01   A    6
      01   B    7
      匯總小計(jì):   13
      02   A    8
      02   B    9
      匯總小計(jì):   17

問(wèn):該如何實(shí)現(xiàn)?

乍一看,好像很容易,用group by好像能實(shí)現(xiàn)?但仔細(xì)研究下去,你又會(huì)覺(jué)得group by也是無(wú)能為力,總欠缺點(diǎn)什么,無(wú)從下手。那么,到底該如何做呢?別急,SQL Server早就幫我們做好了,下面,跟我來(lái)。

首先,讓我們來(lái)看一段話:

在生成包含小計(jì)和合計(jì)的報(bào)表時(shí),ROLLUP 運(yùn)算符很有用。ROLLUP 運(yùn)算符生成的結(jié)果集類似于 CUBE 運(yùn)算符所生成的結(jié)果集。

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

CUBE 運(yùn)算符在 SELECT 語(yǔ)句的 GROUP BY 子句中指定。該語(yǔ)句的選擇列表應(yīng)包含維度列和聚合函數(shù)表達(dá)式。GROUP BY 應(yīng)指定維度列和關(guān)鍵字 WITH CUBE。結(jié)果集將包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎(chǔ)行中的聚合值。

CUBE 和 ROLLUP 之間的區(qū)別在于:

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

ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。

看完以上的這段話,悟出了什么沒(méi)有?如果沒(méi)有,那么……嘿嘿,你的悟性還不夠喲,離“三花棸頂”還早著呢:)。接下來(lái)我們?cè)倏匆欢危ㄗ⒁鈫?,答案馬上就揭曉了):

SELECT 編碼, 倉(cāng)庫(kù), Sum(數(shù)量) as 數(shù)量
      FROM A
      GROUP BY 編碼, 倉(cāng)庫(kù) WITH ROLLUP

--關(guān)鍵就是后面的WITH ROLLUP

--當(dāng)然,你也可以用WITH CUBE,但是結(jié)果會(huì)有點(diǎn)不大一樣

可能看完上面這段你還是覺(jué)得“云里霧里”,摸不著頭腦。實(shí)在不明白也沒(méi)關(guān)系,自己動(dòng)手做。

首先:建一個(gè)上面所說(shuō)的A表,輸入幾行數(shù)據(jù);

接著:打開(kāi)你的SQL Server查詢分析器,連上包含你上面所建A表的服務(wù)器,選擇包含該表的數(shù)據(jù)庫(kù);

然后:Copy上面這段SQL 語(yǔ)句,Paste到查詢分析器中,按F5,怎么樣?看到下面出來(lái)了什么?是不是和我下面的一樣?

編碼    倉(cāng)庫(kù)    數(shù)量
      01      A      6
      01      B      7
      01     NULL     13
      02      A      8
      02      B      9
      02     NULL     17
      NULL    NULL     30

--如果你用的是WITH CUBE,結(jié)果集的后面還會(huì)多出兩條(如果你也只是輸入示例中的幾行數(shù)據(jù)的話):

NULL     A     14
      NULL     B     16

咦!奇怪,結(jié)果中怎么有那么多“NULL”值?哈,別急,這幾行正是我們所要的匯總數(shù)據(jù)行,不難看出:

01 NULL 13正是對(duì)編碼為01的所有倉(cāng)庫(kù)中的數(shù)量的匯總;02 NULL 17是對(duì)編碼為02的所有倉(cāng)庫(kù)的數(shù)量的匯總;

NULL NULL 30是對(duì)所有資料行數(shù)量的匯總。

如何?答案出來(lái)了吧?是不是很簡(jiǎn)單呢?當(dāng)然,上面還有點(diǎn)美中不足,那就是有好多“NULL”的存在。如何去掉這些無(wú)意義的NULL呢?下面我們?cè)龠M(jìn)行優(yōu)化。

1、用Grouping替換NULL值

SELECT CASE WHEN (GROUPING(編碼) = 1) THEN 'ALL'
      ELSE ISNULL(編碼, 'UNKNOWN')
      END AS 編碼,
      CASE WHEN (GROUPING(倉(cāng)庫(kù)) = 1) THEN 'ALL'
      ELSE ISNULL(倉(cāng)庫(kù), 'UNKNOWN')
      END AS 倉(cāng)庫(kù),
      SUM(數(shù)量) AS 數(shù)量
      FROM A
      GROUP BY 編碼, 倉(cāng)庫(kù) WITH ROLLUP

--適當(dāng)?shù)倪\(yùn)用Case函數(shù)

結(jié)果我這里就不寫(xiě)了,就是把上面的“NULL”值全部換成“ALL”字符串

2、利用程序做進(jìn)一步的優(yōu)化

//通常為了顯示上的需要,我們必須對(duì)以上SQL語(yǔ)句生成的結(jié)果做一些優(yōu)化,下面給出自然語(yǔ)言描述:

WHILE(未到達(dá)最后一條記錄){
        IF 編碼值不為ALL而倉(cāng)庫(kù)值為ALL
       ?。?
           將編碼值用“小計(jì):”替換,將倉(cāng)庫(kù)值用""替換;
           將這一行的顏色標(biāo)示為灰色;
       ?。?
        ELSE 編碼值為ALL倉(cāng)庫(kù)值也為ALL
       ?。?
           將編碼值用“總計(jì):”替換,將倉(cāng)庫(kù)值用""替換;
           將這一行的著色標(biāo)示為淡綠色;
       ?。?
        指針移到下一條;
      }
您可能感興趣的文章:
  • SQLServer中匯總功能的使用GROUPING,ROLLUP和CUBE
  • SQL Server優(yōu)化50法匯總
  • SQL Server頁(yè)類型匯總+疑問(wèn)匯總
  • SQLServer與Oracle常用函數(shù)實(shí)例對(duì)比匯總
  • SQL Server數(shù)據(jù)匯總五招輕松搞定

標(biāo)簽:合肥 日照 嘉興 晉城 三明 延邊 澳門(mén) 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLServer 數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總完全解析(WITH ROLLUP)》,本文關(guān)鍵詞  SQLServer,數(shù)據(jù)庫(kù),的,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLServer 數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總完全解析(WITH ROLLUP)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SQLServer 數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總完全解析(WITH ROLLUP)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章

    上一篇:通過(guò)SQL語(yǔ)句直接把表導(dǎo)出為XML格式

    下一篇:sqlserver Union和SQL Union All使用方法

    迁西县| 手游| 合肥市| 大余县| 武强县| 定南县| 宝清县| 中阳县| 来凤县| 泉州市| 黑龙江省| 许昌县| 兴化市| 麻栗坡县| 武汉市| 佛山市| 庐江县| 日土县| 天镇县| 邵东县| 伊宁县| 公安县| 伊吾县| 枝江市| 金秀| 滦南县| 卫辉市| 枣庄市| 河池市| 怀柔区| 罗城| 稻城县| 海城市| 革吉县| 东台市| 海晏县| 灵寿县| 平原县| 同仁县| 顺昌县| 清镇市|