以文本方式查看主題 - 昂捷論壇 (http://www.yzsenyi.com/bbs/index.asp) -- □-通用類 (http://www.yzsenyi.com/bbs/list.asp?boardid=27) ---- 自定義表單數(shù)據(jù)表格里面數(shù)據(jù)統(tǒng)計(jì)的三種方法 (http://www.yzsenyi.com/bbs/dispbbs.asp?boardid=27&id=9298) |
-- 作者:prcak47 -- 發(fā)布時(shí)間:2015/5/13 10:49:45 -- 自定義表單數(shù)據(jù)表格里面數(shù)據(jù)統(tǒng)計(jì)的三種方法 對(duì)于自定義表單的數(shù)據(jù)表格,常常要對(duì)其中的數(shù)據(jù)進(jìn)行數(shù)據(jù)統(tǒng)計(jì), 我們推薦將腳本放在保存后執(zhí)行的腳本中進(jìn)行計(jì)算 下面有三種方法可以選擇 方法1, 統(tǒng)計(jì)出其中的數(shù)據(jù)列數(shù),然后用循環(huán)語(yǔ)句合計(jì)數(shù)值
declare @eform_data table insert into @eform_data(c_data) select * from @eform_data declare @count varchar(20) select @count = cast(c_data.query(\'count(/rows/row/c_tab/drows/drow/c_num)\') as varchar(20)) select @xmldata = c_data.query(\'(/rows/row/c_tab/drows/drow/c_num)\') select @tsql = \'select @sum = @sum + @xmldata.value(\'\'(/c_num)[\'+@count+\']\'\',\'\'money\'\')\' EXECUTE sp_executesql @tsql,N\'@xmldata xml,@sum money out\',@xmldata,@sum out set @count = @COUNT - 1 select @sum
方法2,直接用xml做統(tǒng)計(jì)運(yùn)算
declare @eform_data table
(c_data xml) insert into @eform_data(c_data) values(\'<rows> <row> <c_tab> <drows> <drow> <c_num>18000</c_num> <c_num>1000000</c_num> <c_num>18000</c_num> </drow> </drows> </c_tab> </row> </rows>\') select * from @eform_data declare @sum money select @sum= c_data.value(\'sum(/rows/row/c_tab/drows/drow/c_num)\',\'money\') from @eform_data select @sum
這個(gè)方法雖然語(yǔ)句簡(jiǎn)潔,但是存在一個(gè)問(wèn)題,就是當(dāng)數(shù)據(jù)合計(jì)超過(guò)百萬(wàn)的時(shí)候,數(shù)據(jù)結(jié)果會(huì)變成科學(xué)計(jì)數(shù)法 導(dǎo)致轉(zhuǎn)換為money失敗
方法3 查詢出數(shù)據(jù)的xml,然后用字符串的運(yùn)算計(jì)算合集
declare @eform_data table
(c_data xml) insert into @eform_data(c_data) values(\'<rows> <row> <c_tab> <drows> <drow> <c_num>18000</c_num> <c_num>1000000</c_num> <c_num>18000</c_num> </drow> </drows> </c_tab> </row> </rows>\') select * from @eform_data declare @sql varchar(1000) select @sql = cast(c_data.query(\'(/rows/row/c_tab/drows/drow/c_num)\') as varchar(1000)) from @eform_data select @sql select sum(cast(replace(c_str,\'c_num>\',\'\') as money) ) from dbo.uf_split_string(@sql,\' where c_str not in (\'\',\'/c_num>\',\'\')
[此貼子已經(jīng)被作者于2015/5/13 10:54:58編輯過(guò)]
|