以文本方式查看主题 - 昂捷论坛 (http://enjoyit.com.cn/bbs/index.asp) -- □-通用类 (http://enjoyit.com.cn/bbs/list.asp?boardid=27) ---- 自定义表单数据表格里面数据统计的三种方法 (http://enjoyit.com.cn/bbs/dispbbs.asp?boardid=27&id=9298) |
-- 作者:prcak47 -- 发布时间:2015/5/13 10:49:45 -- 自定义表单数据表格里面数据统计的三种方法 对于自定义表单的数据表格,常常要对其中的数据进行数据统计, 我们推荐将脚本放在保存后执行的脚本中进行计算 下面有三种方法可以选择 方法1, 统计出其中的数据列数,然后用循环语句合计数值
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做统计运算
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
这个方法虽然语句简洁,但是存在一个问题,就是当数据合计超过百万的时候,数据结果会变成科学计数法 导致转换为money失败
方法3 查询出数据的xml,然后用字符串的运算计算合集
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>\',\'\')
[此贴子已经被作者于2015/5/13 10:54:58编辑过]
|