日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer數(shù)據(jù)庫相關(guān)數(shù)據(jù)大匯和

此文章主要向大家描述的是SQL Server數(shù)據(jù)庫的相關(guān)數(shù)據(jù)匯總,完全解析(WITH ROLLUP)我前兩天在相關(guān)網(wǎng)站看見的SQL Server數(shù)據(jù)庫的數(shù)據(jù)匯總完全解析(WITH ROLLUP)資料,覺得挺好,就拿出來供大家分享?,F(xiàn)有表A,內(nèi)容如下:

創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元渠縣做網(wǎng)站,已為上家服務(wù),為渠縣各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

編碼 倉庫 數(shù)量

01 A 6

01 B 7

02 A 8

02 B 9

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

01 A 6

01 B 7

匯總小計: 13

02 A 8

02 B 9

匯總小計: 17

問:該如何實現(xiàn)?

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

首先,讓我們來看一段話:

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

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

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

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

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

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

看完以上的這段話,悟出了什么沒有?如果沒有,那么……嘿嘿,你的悟性還不夠喲,離“三花棸頂”還早著呢:)。接下來我們再看一段(注意喲,答案馬上就揭曉了):

SELECT 編碼, 倉庫, Sum(數(shù)量) as 數(shù)量

FROM A

GROUP BY 編碼, 倉庫 WITH ROLLUP

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

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

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

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

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

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

編碼 倉庫 數(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é)果集的后面還會多出兩條(如果你也只是輸入示例中的幾行數(shù)據(jù)的話):

NULL A 14

NULL B 16

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

01NULL13正是對編碼為01的所有倉庫中的數(shù)量的匯總;02NULL17是對編碼為02的所有倉庫的數(shù)量的匯總;

NULLNULL30是對所有資料行數(shù)量的匯總。

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

1、用Grouping替換NULL值

SELECT CASE WHEN (GROUPING(編碼) = 1) THEN 'ALL'

ELSE ISNULL(編碼, 'UNKNOWN')

END AS 編碼,

CASE WHEN (GROUPING(倉庫) = 1) THEN 'ALL'

ELSE ISNULL(倉庫, 'UNKNOWN')

END AS 倉庫,

SUM(數(shù)量) AS 數(shù)量

FROM A

GROUP BY 編碼, 倉庫 WITH ROLLUP

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

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

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

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

WHILE(未到達(dá)***一條記錄){

IF 編碼值不為ALL而倉庫值為ALL

將編碼值用“小計:”替換,將倉庫值用""替換;

將這一行的顏色標(biāo)示為灰色;

ELSE 編碼值為ALL倉庫值也為ALL

將編碼值用“總計:”替換,將倉庫值用""替換;

將這一行的著色標(biāo)示為淡綠色;

指針移到下一條;

}

以上的相關(guān)內(nèi)容就是對SQL Server數(shù)據(jù)庫的數(shù)據(jù)匯總完全解析(WITH ROLLUP)的介紹,望你能有所收獲。


本文標(biāo)題:SQLServer數(shù)據(jù)庫相關(guān)數(shù)據(jù)大匯和
本文地址:http://www.dlmjj.cn/article/coeddie.html