在論壇上經(jīng)常看到有人問(wèn)“如何實(shí)現(xiàn)數(shù)據(jù)的分類匯總”,很多的人都是介紹這樣或那樣的控件來(lái)實(shí)現(xiàn),而沒有從關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言(SQL)的本身來(lái)考慮實(shí)現(xiàn)方法。這里,我就借一個(gè)實(shí)例來(lái)說(shuō)明如何借助SQL自身強(qiáng)大的功能來(lái)實(shí)現(xiàn)數(shù)據(jù)的分類匯總。
問(wèn)題的提出:
現(xiàn)有表A,內(nèi)容如下:
編碼 | 倉(cāng)庫(kù) | 數(shù)量 |
01 | A | 6 |
01 | B | 7 |
02 | A | 8 |
02 | B | 9 |
現(xiàn)在想按編碼查詢出這種格式:
編碼 | 倉(cāng)庫(kù) | 數(shù)量 |
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ì)覺得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)的聚合。
看完以上的這段話,悟出了什么沒有?如果沒有,那么……嘿嘿,你的悟性還不夠喲,離“三花 主站蜘蛛池模板: 镇安县| 金坛市| 福建省| 寿光市| 南川市| 维西| 无为县| 嵊州市| 磴口县| 多伦县| 西安市| 西乌珠穆沁旗| 昌江| 潞西市| 宝兴县| 富顺县| 洪雅县| 磐石市| 双江| 闽清县| 宽甸| 新宁县| 新乐市| 衡山县| 修武县| 东乡县| 湾仔区| 贵阳市| 宣武区| 合肥市| 潼关县| 崇礼县| 海兴县| 普格县| 通州市| 瑞安市| 高雄市| 株洲县| 广州市| 建德市| 长阳|