自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server數(shù)據(jù)的大集合

數(shù)據(jù)庫(kù) SQL Server
我們今天是要和大家一起討論的是SQL Server數(shù)據(jù)的匯總,以及對(duì)其實(shí)際操作應(yīng)驗(yàn)的解析,以下就是詳細(xì)內(nèi)容介紹,望大家借鑒。

以下的文章主要描述的是SQL Server數(shù)據(jù)的匯總,以及對(duì)其實(shí)際操作應(yīng)驗(yàn)的解析,在論壇上經(jīng)常看到有人問(wèn)“如何實(shí)現(xiàn)SQL Server數(shù)據(jù)庫(kù)的數(shù)據(jù)的分類(lèi)匯總”,很多的人都是介紹這樣或那樣的控件來(lái)實(shí)現(xiàn),而沒(méi)有從關(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)SQL Server數(shù)據(jù)的分類(lèi)匯總。

問(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)在想按編碼查詢(xú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ì)覺(jué)得group by也是無(wú)能為力,總欠缺點(diǎn)什么,無(wú)從下手。那么,到底該如何做呢?別急,SQL Server早就幫我們做好了,下面,跟我來(lái)。

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

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

CUBE 運(yùn)算符生成的結(jié)果集是多維數(shù)據(jù)集。多維SQL Server數(shù)據(jù)集是事實(shí)數(shù)據(jù)的擴(kuò)展,事實(shí)數(shù)據(jù)即記錄個(gè)別事件的數(shù)據(jù)。擴(kuò)展建立在用戶(hù)打算分析的列上。這些列被稱(chēng)為維。多維數(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)的聚合。

看完以上的這段話(huà),悟出了什么沒(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表,輸入幾行SQL Server數(shù)據(jù);接著:打開(kāi)你的SQL Server查詢(xún)分析器,連上包含你上面所建A表的服務(wù)器,選擇包含該表的數(shù)據(jù)庫(kù);然后:Copy上面這段SQL 語(yǔ)句,Paste到查詢(xún)分析器中,按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ù)的話(huà)): NULL A 14

NULL B 16

咦!奇怪,結(jié)果中怎么有那么多“NULL”值?哈,別急,這幾行正是我們所要的匯總SQL Server數(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)示為淡綠色;

指針移到下一條;

}

//當(dāng)然,你盡可以發(fā)揮你的想象,把表格打扮得漂漂亮亮的,我就不再羅嗦了。

結(jié)束語(yǔ):

通過(guò)上面的講述,不知道你明白了沒(méi)有,限于作者的文字表達(dá)能力,未解釋清楚之處還請(qǐng)見(jiàn)諒。

【編輯推薦】

  1. SQL Server 2005中synonyms的正確用法
  2. SQL Server快照功能以及其查詢(xún)操作
  3. SQL Server數(shù)據(jù)庫(kù)和Oracle行轉(zhuǎn)列的特殊方案描述
  4. SQL Server行轉(zhuǎn)列的什么情況下被用?
  5. SQL Server獲取表的容量很簡(jiǎn)單!
責(zé)任編輯:佚名 來(lái)源: weaseek.com
相關(guān)推薦

2010-07-26 09:06:09

SQL Server游

2010-02-03 09:53:08

Python版本

2012-01-05 10:19:43

JavaScript

2012-04-28 10:29:24

jQuery

2018-12-17 09:00:00

大數(shù)據(jù)數(shù)據(jù)科學(xué)工具

2011-07-04 10:33:22

QT

2010-10-20 17:31:40

Fedora應(yīng)用

2014-05-15 15:29:09

Android開(kāi)發(fā)資源

2013-08-13 13:38:13

Android錯(cuò)誤解決

2011-06-21 10:44:32

QT QTE

2010-02-24 10:52:24

IBM中端服務(wù)器

2010-06-09 17:00:43

UML試題

2009-11-24 19:02:35

PHP常用字符串

2009-08-24 11:04:56

2010-08-04 09:57:28

路由器

2010-10-12 14:28:54

2025-02-17 00:00:03

人工智能AI工具

2009-01-07 10:30:25

2014-06-12 17:02:46

世界杯手游

2012-12-26 17:14:03

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)