統(tǒng)計(jì)報(bào)表(用ROLLUP 匯總數(shù)據(jù))
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
[b]作者 :[/b] [url=http://delphibbs.com/keylife/iblog.asp?author=hongyuan][color=#002c99]hongyuan[/color][/url][br][b]標(biāo)題 :[/b] 統(tǒng)計(jì)報(bào)表(用rollup 匯總數(shù)據(jù)) [br][b]關(guān)鍵字:[/b] [br][b]分類 :[/b] [url=http://delphibbs.com/keylife/iblog.asp?author=hongyuan&rid=11148][color=#002c99]sql server 2000[/color][/url] [br][b]密級(jí) :[/b] 私有 [align=right][url=http://delphibbs.com/keylife/iblog_comment.asp?xid=17813&pageno=9999][color=#002c99][/color][/url] [/align] [p]統(tǒng)計(jì)報(bào)表(用rollup 匯總數(shù)據(jù)) [br]原貼:[url=http://community.csdn.net/expert/topic/4313/4313978.xml?temp=.691601][color=#002c99]http://community.csdn.net/expert/topic/4313/4313978.xml?temp=.691601[/color][/url][br][br][br]表inventory [br]item color quantity [br]-------------------- -------------------- -------------------------- [br]table blue 124 [br]table red 223 [br]chair blue 101 [br]chair red 210 [br][br]要得到下面結(jié)果: [br][br]item color qtysum [br]-------------------- -------------------- -------------------------- [br]chair blue 101.00 [br]chair red 210.00 [br]chair小計(jì) 311.00 [br]table blue 124.00 [br]table red 223.00 [br]table小計(jì) 347.00 [br]總計(jì) 658.00 [br][br][br]---該問題是一個(gè)典型的使用rollup生成結(jié)合的例子,聯(lián)機(jī)幫助也有相關(guān)介紹![br][br][br]-測(cè)試環(huán)境[br]declare @inventory table (item varchar(20),color varchar(20),quantity money)[br]insert into @inventory select 'table','blue',124[br]insert into @inventory select 'table','red' ,223[br]insert into @inventory select 'chair','blue',101[br]insert into @inventory select 'chair','red' ,210[br][br]--查詢[br]select case when (grouping(item) = 1) then '總計(jì)'[br] when (grouping(color) = 1) then item+'小計(jì)'[br] else isnull(item, 'unknown')[br] end as item,[br] case when (grouping(color) = 1) then ''[br] else isnull(color, 'unknown')[br] end as color,[br] sum(quantity) as qtysum[br]from @inventory[br]group by item, color with rollup[br][br]--結(jié)果[br]item color qtysum [br]------------------------ -------------------- --------------------- [br]chair blue 101.0000[br]chair red 210.0000[br]chair小計(jì) 311.0000[br]table blue 124.0000[br]table red 223.0000[br]table小計(jì) 347.0000[br]總計(jì) 658.0000[br][br](所影響的行數(shù)為 7 行) [/p][br] [align=right]2005-10-10 9:44:39 [/align] [url=http://delphibbs.com/keylife/iblog_man.asp?xid=17813][color=#002c99]修改筆記[/color][/url] [url=http://delphibbs.com/keylife/iblog_comment.asp?xid=17813][color=#002c99]發(fā)表評(píng)語»»»[/color][/url] [url=javascript:modifycomment(18073)][color=#002c99]2005-10-10 10:01:01[/color][/url] grouping [p]grouping[br]是一個(gè)聚合函數(shù),它產(chǎn)生一個(gè)附加的列,當(dāng)用 cube 或 rollup 運(yùn)算符添加行時(shí),附加的列輸出值為1,當(dāng)所添加的行不是由 cube 或 rollup 產(chǎn)生時(shí),附加列值為0。[br][br]僅在與包含 cube 或 rollup 運(yùn)算符的 group by 子句相聯(lián)系的選擇列表中才允許分組。[br][br]語法[br]grouping ( column_name )[br][br]參數(shù)[br]column_name[br][br]是 group by 子句中用于檢查 cube 或 rollup 空值的列。[br][br]返回類型[br]int[br][br]注釋[br]分組用于區(qū)分由 cube 和 rollup 返回的空值和標(biāo)準(zhǔn)的空值。作為cube 或 rollup 操作結(jié)果返回的 null 是 null 的特殊應(yīng)用。它在結(jié)果集內(nèi)作為列的占位符,意思是"全體"。 [/p] [align=right] [/align] [url=javascript:modifycomment(18074)][color=#002c99]2005-10-10 10:02:45[/color][/url] 用 rollup 匯總數(shù)據(jù) [p]用 rollup 匯總數(shù)據(jù)[br]在生成包含小計(jì)和合計(jì)的報(bào)表時(shí),rollup 運(yùn)算符很有用。rollup 運(yùn)算符生成的結(jié)果集類似于 cube 運(yùn)算符所生成的結(jié)果集。有關(guān)更多信息,請(qǐng)參見用 cube 匯總數(shù)據(jù)。 [br][br]cube 和 rollup 之間的區(qū)別在于: [br][br]cube 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。[br][br][br]rollup 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。 [br]例如,簡單表 inventory 中包含:[br][br]item color quantity [br]-------------------- -------------------- -------------------------- [br]table blue 124 [br]table red 223 [br]chair blue 101 [br]chair red 210 [br][br]下列查詢將生成小計(jì)報(bào)表:[br][br]select case when (grouping(item) = 1) then 'all'[br] else isnull(item, 'unknown')[br] end as item,[br] case when (grouping(color) = 1) then 'all'[br] else isnull(color, 'unknown')[br] end as color,[br] sum(quantity) as qtysum[br]from inventory[br]group by item, color with rollup[br][br]item color qtysum [br]-------------------- -------------------- -------------------------- [br]chair blue 101.00 [br]chair red 210.00 [br]chair all 311.00 [br]table blue 124.00 [br]table red 223.00 [br]table all 347.00 [br]all all 658.00 [br][br](7 row(s) affected)[br][br]如果查詢中的 rollup 關(guān)鍵字更改為 cube,那么 cube 結(jié)果集與上述結(jié)果相同,只是在結(jié)果集的末尾還會(huì)返回下列兩行:[br][br]all blue 225.00 [br]all red 433.00 [br][br]cube 操作為 item 和 color 中值的可能組合生成行。例如,cube 不僅報(bào)告與 item 值 chair 相組合的 color 值的所有可能組合(red、blue 和 red + blue),而且報(bào)告與 color 值 red 相組合的 item 值的所有可能組合(chair、table 和 chair + table)。[br][br]對(duì)于 group by 子句中右邊的列中的每個(gè)值,rollup 操作并不報(bào)告左邊一列(或左邊各列)中值的所有可能組合。例如,rollup 并不對(duì)每個(gè) color 值報(bào)告 item 值的所有可能組合。[br][br]rollup 操作的結(jié)果集具有類似于 compute by 所返回結(jié)果集的功能;然而,rollup 具有下列優(yōu)點(diǎn): [br][br]rollup 返回單個(gè)結(jié)果集;compute by 返回多個(gè)結(jié)果集,而多個(gè)結(jié)果集會(huì)增加應(yīng)用程序代碼的復(fù)雜性。[br][br][br]rollup 可以在服務(wù)器游標(biāo)中使用;compute by 不可以。[br][br][br]有時(shí),查詢優(yōu)化器為 rollup 生成的執(zhí)行計(jì)劃比為 compute by 生成的更為高效。 [/p] 該文章在 2010/6/27 17:33:22 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |