成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server數據的大集合

數據庫 SQL Server
我們今天是要和大家一起討論的是SQL Server數據的匯總,以及對其實際操作應驗的解析,以下就是詳細內容介紹,望大家借鑒。

以下的文章主要描述的是SQL Server數據的匯總,以及對其實際操作應驗的解析,在論壇上經常看到有人問“如何實現SQL Server數據庫的數據的分類匯總”,很多的人都是介紹這樣或那樣的控件來實現,而沒有從關系數據庫語言(SQL)的本身來考慮實現方法。

這里,我就借一個實例來說明如何借助SQL自身強大的功能來實現SQL Server數據的分類匯總。

問題的提出:

現有表A,內容如下:

編碼 倉庫 數量

01 A 6

01 B 7

02 A 8

02 B 9

現在想按編碼查詢出這種格式:

編碼 倉庫 數量

01 A 6

01 B 7

匯總小計: 13

02 A 8

02 B 9

匯總小計: 17

問:該如何實現?

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

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

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

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

CUBE 運算符在 SELECT 語句的 GROUP BY 子句中指定。該語句的選擇列表應包含維度列和聚合函數表達式。GROUP BY 應指定維度列和關鍵字 WITH CUBE。結果集將包含維度列中各值的所有可能組合,以及與這些維度值組合相匹配的基礎行中的聚合值。

CUBE 和 ROLLUP 之間的區別在于: CUBE 生成的結果集顯示了所選列中值的所有組合的聚合;ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。

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

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

FROM A

GROUP BY 編碼, 倉庫 WITH ROLLUP

--關鍵就是后面的WITH ROLLUP

--當然,你也可以用WITH CUBE,但是結果會有點不大一樣

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

首先:建一個上面所說的A表,輸入幾行SQL Server數據;接著:打開你的SQL Server查詢分析器,連上包含你上面所建A表的服務器,選擇包含該表的數據庫;然后:Copy上面這段SQL 語句,Paste到查詢分析器中,按F5,怎么樣?看到下面出來了什么?是不是和我下面的一樣?

編碼 倉庫 數量

01 A 6

01 B 7

01 NULL 13

02 A 8

02 B 9

02 NULL 17

NULL NULL 30

如果你用的是WITH CUBE,結果集的后面還會多出兩條(如果你也只是輸入示例中的幾行數據的話): NULL A 14

NULL B 16

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

01 NULL 13正是對編碼為01的所有倉庫中的數量的匯總;02 NULL 17是對編碼為02的所有倉庫的數量的匯總;

NULL NULL 30是對所有資料行數量的匯總。

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

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(數量) AS 數量

FROM A

GROUP BY 編碼, 倉庫 WITH ROLLUP

--適當的運用Case函數

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

2、利用程序做進一步的優化

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

WHILE(未到達最后一條記錄){

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

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

將這一行的顏色標示為灰色;

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

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

將這一行的著色標示為淡綠色;

指針移到下一條;

}

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

結束語:

通過上面的講述,不知道你明白了沒有,限于作者的文字表達能力,未解釋清楚之處還請見諒。

【編輯推薦】

  1. SQL Server 2005中synonyms的正確用法
  2. SQL Server快照功能以及其查詢操作
  3. SQL Server數據庫和Oracle行轉列的特殊方案描述
  4. SQL Server行轉列的什么情況下被用?
  5. SQL Server獲取表的容量很簡單!
責任編輯:佚名 來源: weaseek.com
相關推薦

2010-07-26 09:06:09

SQL Server游

2012-01-05 10:19:43

JavaScript

2010-02-03 09:53:08

Python版本

2012-04-28 10:29:24

jQuery

2018-12-17 09:00:00

大數據數據科學工具

2011-07-04 10:33:22

QT

2010-10-20 17:31:40

Fedora應用

2014-05-15 15:29:09

Android開發資源

2011-06-21 10:44:32

QT QTE

2013-08-13 13:38:13

Android錯誤解決

2010-02-24 10:52:24

IBM中端服務器

2010-06-09 17:00:43

UML試題

2009-11-24 19:02:35

PHP常用字符串

2010-10-12 14:28:54

2010-08-04 09:57:28

路由器

2009-08-24 11:04:56

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

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在线播放 | 久久国产一区 | 日韩精品免费看 | 三级高清| 色婷婷久久综合 | 亚洲国产一区二区三区四区 | 精品国产一区二区三区久久 | 国产精品一卡二卡三卡 | 精品国产欧美 | 精品婷婷 | 亚洲 欧美 另类 综合 偷拍 | 青青伊人久久 | 一区在线视频 | 美女国内精品自产拍在线播放 | 久久不卡 | 午夜国产 | 欧美在线色视频 | 欧美另类视频 | 蜜臀网 | 国内自拍视频在线观看 | 三级黄色片在线播放 | 巨大黑人极品videos精品 | 日韩精品一区二区三区中文在线 | 可以免费看的毛片 | 日本中文字幕日韩精品免费 | a视频在线| 青青草视频免费观看 | 精品久久久久久久久久久久久 | 久在线 | 亚洲一区视频在线 | 久久88 | 欧美精品片 | 日日夜夜免费精品 | 日韩欧美二区 | 老牛影视av一区二区在线观看 | 一级片免费观看 | 国产成人精品网站 | 中日韩欧美一级片 | 亚洲网站在线观看 | 国产 日韩 欧美 制服 另类 | 久久99久久99久久 |