欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQLSERVER中union,cube,rollup,cumpute運(yùn)算符使用說(shuō)明

 更新時(shí)間:2009年09月21日 19:15:18   作者:  
union,cube,rollup,cumpute運(yùn)算符的使用技巧。
/*
--1 UNION 運(yùn)算符是將兩個(gè)或更多查詢的結(jié)果組合為單個(gè)結(jié)果集
使用 UNION 組合查詢的結(jié)果集有兩個(gè)最基本的規(guī)則:
1。所有查詢中的列數(shù)和列的順序必須相同。
2。數(shù)據(jù)類型必須兼容
a.UNION的結(jié)果集列名與第一個(gè)select語(yǔ)句中的結(jié)果集中的列名相同,其他select語(yǔ)句的結(jié)果集列名被忽略
b.默認(rèn)情況下,UNION 運(yùn)算符是從結(jié)果集中刪除重復(fù)行。如果使用all關(guān)鍵字,那么結(jié)果集將包含所有行并且不刪除重復(fù)行
c.sql是從左到右對(duì)包含UNION 運(yùn)算符的語(yǔ)句進(jìn)行取值,使用括號(hào)可以改變求值順序
--例如:
*/
select * from tablea
union all
(
select * from tableb
union all
select * from tablec
)
/*
這樣就可以先對(duì)tableb和tablec合并,再合并tablea
d.如果要將合并后的結(jié)果集保存到一個(gè)新數(shù)據(jù)表中,那么into語(yǔ)句必須加入到第一條select中
e.只可以在最后一條select語(yǔ)句中使用 order by 和 compute 子句,這樣影響到最終合并結(jié)果的排序和計(jì)數(shù)匯總
f.group by 和 having 子句可以在單獨(dú)一個(gè)select查詢中使用,它們不影響最終結(jié)果
*/
--2 CUBE 匯總數(shù)據(jù)
/*
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ǔ)行中的聚合值。
*/
--下列查詢返回的結(jié)果集中,將包含 Item 和 Color 的所有可能組合的 Quantity 小計(jì):
-->Title:生成測(cè)試數(shù)據(jù)
-->Author:wufeng4552
-->Date :2009-09-10 14:36:20
if not object_id('Tempdb..#t') is null
drop table #t
Go
Create table #t([Item] nvarchar(5),[Color] nvarchar(4),[Quantity] int)
Insert #t
select N'Table',N'Blue',124 union all
select N'Table',N'Red',223 union all
select N'Chair',N'Blue',101 union all
select N'Chair',N'Red',210
Go
select [Item],
[Color],
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with cube
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair NULL 311
Table Blue 124
Table Red 223
Table NULL 347
NULL NULL 658
NULL Blue 225
NULL Red 433
*/
/*CUBE 操作所生成的空值帶來(lái)一個(gè)問(wèn)題:如何區(qū)分 CUBE 操作所生成的 NULL 值和從實(shí)際數(shù)據(jù)中返回的 NULL 值?
這個(gè)問(wèn)題可用 GROUPING 函數(shù)解決。
如果列中的值來(lái)自事實(shí)數(shù)據(jù),則 GROUPING 函數(shù)返回 0;如果列中的值是 CUBE 操作所生成的 NULL,則返回 1。
在 CUBE 操作中,所生成的 NULL 代表全體值??蓪?SELECT 語(yǔ)句寫成使用 GROUPING 函數(shù)將所生成的 NULL 替換為字符串 ALL。
因?yàn)槭聦?shí)數(shù)據(jù)中的 NULL 表明數(shù)據(jù)值未知,所以 SELECT 語(yǔ)句還可譯碼為返回字符串 UNKNOWN 替代來(lái)自事實(shí)數(shù)據(jù)的 NULL。
例如:
*/
-->Title:生成測(cè)試數(shù)據(jù)
-->Author:wufeng4552
-->Date :2009-09-10 14:36:20
if not object_id('Tempdb..#t') is null
drop table #t
Go
Create table #t([Item] nvarchar(5),[Color] nvarchar(4),[Quantity] int)
Insert #t
select N'Table',N'Blue',124 union all
select N'Table',N'Red',223 union all
select N'Chair',N'Blue',101 union all
select N'Chair',N'Red',210
Go
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with cube
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair ALL 311
Table Blue 124
Table Red 223
Table ALL 347
ALL ALL 658
ALL Blue 225
ALL Red 433
(9 個(gè)資料列受到影響)
*/
/*
包含帶有許多維度的 CUBE 的 SELECT 語(yǔ)句可能生成很大的結(jié)果集,因?yàn)檫@些語(yǔ)句會(huì)為所有維度中值的所有組合生成行。
這些大結(jié)果集包含的數(shù)據(jù)可能過(guò)多而不易于閱讀和理解。這個(gè)問(wèn)題有一種解決辦法是將 SELECT 語(yǔ)句放在視圖中:
*/
create view view_cube
as
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from tb group by [Item],[Color] with cube --視圖中不能用臨時(shí)表,故改之
--然后即可用該視圖來(lái)只查詢您感興趣的維度值:
SELECT *
FROM InvCube
WHERE Item = 'Chair' AND Color = 'ALL'
/*
Item Color QtySum
-------------------- -------------------- ---------
Chair ALL 311.00
*/
--3 ROLLUP 匯總數(shù)據(jù)
/*
用 ROLLUP 匯總數(shù)據(jù)在生成包含小計(jì)和合計(jì)的報(bào)表時(shí),ROLLUP 運(yùn)算符很有用。
ROLLUP 運(yùn)算符生成的結(jié)果集類似于 CUBE 運(yùn)算符所生成的結(jié)果集。
CUBE 和 ROLLUP 之間的區(qū)別在于: CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。 例如,簡(jiǎn)單表 #t
中包含:Item Color Quantity
*/
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with rollup
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair ALL 311
Table Blue 124
Table Red 223
Table ALL 347
ALL ALL 658
(7 個(gè)資料列受到影響)
*/
/*
如果查詢中的 ROLLUP 關(guān)鍵字更改為 CUBE,那么 CUBE 結(jié)果集與上述結(jié)果相同,只是在結(jié)果集的末尾還會(huì)返回下列兩行:ALL Blue 225.00
ALL Red 433.00
CUBE 操作為 Item 和 Color 中值的可能組合生成行。
例如,CUBE 不僅報(bào)告與 Item 值 Chair 相組合的 Color 值的所有可能組合(Red、Blue 和 Red + Blue),
而且報(bào)告與 Color 值 Red 相組合的 Item 值的所有可能組合(Chair、Table 和 Chair + Table)。
對(duì)于 GROUP BY 子句中右邊的列中的每個(gè)值,ROLLUP 操作并不報(bào)告左邊一列(或左邊各列)中值的所有可能組合。例如,
ROLLUP 并不對(duì)每個(gè) Color 值報(bào)告 Item 值的所有可能組合。
ROLLUP 操作的結(jié)果集具有類似于 COMPUTE BY 所返回結(jié)果集的功能;然而,ROLLUP 具有下列優(yōu)點(diǎn): ROLLUP 返回單個(gè)結(jié)果集;COMPUTE BY 返回多個(gè)結(jié)果集,而多個(gè)結(jié)果集會(huì)增加應(yīng)用程序代碼的復(fù)雜性。
ROLLUP 可以在服務(wù)器游標(biāo)中使用;COMPUTE BY 不可以。
有時(shí),查詢優(yōu)化器為 ROLLUP 生成的執(zhí)行計(jì)劃比為 COMPUTE BY 生成的更為高效。
*/

相關(guān)文章

  • 在sqlserver中如何使用CTE解決復(fù)雜查詢問(wèn)題

    在sqlserver中如何使用CTE解決復(fù)雜查詢問(wèn)題

    本文給大家介紹使用cte解決復(fù)雜查詢問(wèn)題,在此代碼中需要注意count函數(shù),它統(tǒng)計(jì)了一個(gè)列,如果該列在某行的值為null,將不會(huì)統(tǒng)計(jì)該行,本文代碼詳解并附有注釋,感興趣的朋友一起看看吧
    2015-11-11
  • 分析SQL語(yǔ)句性能3種方法分享

    分析SQL語(yǔ)句性能3種方法分享

    分析SQL語(yǔ)句性能3種方法分享,需要的朋友可以參考下
    2012-05-05
  • freetds簡(jiǎn)介、安裝、配置及使用介紹

    freetds簡(jiǎn)介、安裝、配置及使用介紹

    簡(jiǎn)單的說(shuō)FreeTDS是一個(gè)程序庫(kù),可以實(shí)現(xiàn)在Linux系統(tǒng)下訪問(wèn)微軟的SQL數(shù)據(jù)庫(kù)! FreeTDS是一個(gè)讓SYBASE和Microsofte數(shù)據(jù)庫(kù)客戶端和其數(shù)據(jù)庫(kù)服務(wù)通信的工具,其能夠完成例如DB-Lib,CT-Lib,ODBC,JDBC和Perl DBI的工作。
    2014-08-08
  • 隱藏在SQLServer 字段中的超詭異字符解決過(guò)程

    隱藏在SQLServer 字段中的超詭異字符解決過(guò)程

    這套系統(tǒng)做了大半年,這個(gè)導(dǎo)入導(dǎo)出還是問(wèn)題不斷,我負(fù)責(zé)的這塊導(dǎo)入導(dǎo)出就是夾在網(wǎng)絡(luò)版和單機(jī)版系統(tǒng)之間,只要任何一邊對(duì)數(shù)據(jù)庫(kù)做了改動(dòng)這個(gè)導(dǎo)入導(dǎo)出就會(huì)失敗。哎,煩心的事不止這些,最近又遇到了一個(gè)非常奇怪的問(wèn)題。
    2009-10-10
  • SqlServer開發(fā)神器'SQLPrompt'插件的使用詳解

    SqlServer開發(fā)神器'SQLPrompt'插件的使用詳解

    SQLPrompt是Sql?Server?開發(fā)智能提示插件,方便查詢表結(jié)果,避免了開發(fā)人員一個(gè)個(gè)敲查詢語(yǔ)句、執(zhí)行語(yǔ)句等,這篇文章主要介紹了SqlServer數(shù)據(jù)庫(kù)開發(fā)神器'SQLPrompt插件'的使用說(shuō)明,需要的朋友可以參考下
    2023-03-03
  • sql 查詢記錄數(shù)結(jié)果集某個(gè)區(qū)間內(nèi)記錄

    sql 查詢記錄數(shù)結(jié)果集某個(gè)區(qū)間內(nèi)記錄

    sqlserver如何實(shí)現(xiàn)查詢記錄數(shù)某個(gè)區(qū)間內(nèi)記錄,本文將提供多種解決方法,需要了解的朋友可以參考下
    2012-11-11
  • SQL Server查找表名或列名中包含空格的表和列實(shí)例代碼

    SQL Server查找表名或列名中包含空格的表和列實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于SQL Server如何查找表名或列名中包含空格的表和列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-09-09
  • 將表里的數(shù)據(jù)批量生成INSERT語(yǔ)句的存儲(chǔ)過(guò)程 增強(qiáng)版

    將表里的數(shù)據(jù)批量生成INSERT語(yǔ)句的存儲(chǔ)過(guò)程 增強(qiáng)版

    這篇文章主要介紹了將表里的數(shù)據(jù)批量生成INSERT語(yǔ)句的存儲(chǔ)過(guò)程 增強(qiáng)版的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • SQL查詢排名函數(shù)實(shí)例

    SQL查詢排名函數(shù)實(shí)例

    本文主要講解SQL查詢排名函數(shù)實(shí)例,比較實(shí)用,希望能給大家做一個(gè)參考。
    2016-06-06
  • MSSQL數(shù)據(jù)類型及長(zhǎng)度限制詳細(xì)說(shuō)明

    MSSQL數(shù)據(jù)類型及長(zhǎng)度限制詳細(xì)說(shuō)明

    在 Microsoft® SQL Server™ 中,每個(gè)列、局部變量、表達(dá)式和參數(shù)都有一個(gè)相關(guān)的數(shù)據(jù)類型,這是指定對(duì)象可持有的數(shù)據(jù)類型(整型、字符、money 等等)的特性。
    2008-08-08

最新評(píng)論