熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

解析SQLServer任意列之間的聚合

2013-11-23 21:04:24  來源: MySQL 

  sql的max之類的聚合函數只能針對同一列的n行運算如果對n列運算一般都用case 語句來判斷如果列少還比較容易寫列多了就麻煩了

/*
測試名稱利用 XML 求任意列之間的聚合
測試功能對一張表的列數據做 min max sum 和 avg 運算
運行原理字段合並為 xml 後做 xquery 查詢轉為行集後聚合
*/
建立測試環境
declare @t table (
id smallint
a smallint b smallint
c smallint d smallint
e smallint f smallint )

insert into @t
select union all
select

測試語句
select a* c*
from @t a outer apply(
select doc=(
select * from @t as doc where id= a id for xml path ( ) type )
) b
outer apply(
select
min ( r) as minValue
max ( r) as maxValue
sum ( r) as sumValue
avg ( r) as avgValue
from (
select cast ( cast ( d n query( text() ) as varchar ( max )) as int ) as r
from doc nodes( /abcdef ) D( n)) tt
) c

/* 測試結果
id a b c d e f minValue maxValue sumValue avgValue



*/


From:http://tw.wingwit.com/Article/program/MySQL/201311/29537.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.