在論壇上經(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)的聚合。
看完以上的這段話,悟出了什么沒有?如果沒有,那么……嘿嘿,你的悟性還不夠喲,離“三花 主站蜘蛛池模板: 谷城县| 延津县| 永安市| 大荔县| 个旧市| 开封市| 格尔木市| 武宁县| 休宁县| 阿拉善盟| 和龙市| 惠来县| 苍溪县| 鄂州市| 定远县| 乌恰县| 巴南区| 章丘市| 九龙城区| 大足县| 泽库县| 龙州县| 临夏县| 东宁县| 昌邑市| 淮北市| 丹东市| 巩留县| 石家庄市| 奉新县| 隆林| 咸丰县| 肃北| 弋阳县| 阿巴嘎旗| 丰镇市| 永新县| 南陵县| 左云县| 平陆县| 武威市|