昂捷论坛≡FAQ≡□-通用类 → 自定义表单数据表格里面数据统计的三种方法


  共有23867人关注过本帖树形打印

主题:自定义表单数据表格里面数据统计的三种方法

帅哥哟,离线,有人找我吗?
prcak47
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级管理员 帖子:145 积分:2648 威望:0 精华:0 注册:2005/12/10 16:23:42
自定义表单数据表格里面数据统计的三种方法  发帖心情 Post By:2015/5/13 10:49:45

对于自定义表单的数据表格,常常要对其中的数据进行数据统计,

我们推荐将脚本放在保存后执行的脚本中进行计算

下面有三种方法可以选择

方法1,

统计出其中的数据列数,然后用循环语句合计数值

 


 

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 @count varchar(20)
declare @sum money
declare @tsql nvarchar(1000)
declare @xmldata xml
set @sum = 0

select @count = cast(c_data.query('count(/rows/row/c_tab/drows/drow/c_num)') as varchar(20))
 from @eform_data
 
select @count

select @xmldata = c_data.query('(/rows/row/c_tab/drows/drow/c_num)')
 from @eform_data
 
while @count <> 0
begin

 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
end

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编辑过]

使用IE9无法添加附件的解决方法 支持(0中立(0反对(0回到顶部