关闭

关于自定义设置聚合计算的解决方案

593人阅读 评论(0) 收藏 举报

我的思路就是建一个设置保存用的表,结构如下

create table settings(

colname varchar(30), --列名

colsum bit, --是否汇总

colby bit,  --是否汇总依据

hostname varchar(20))

go

/*可以在客户端将用户需要汇总的列以及汇总依据的列写入此表*/

create procedure querysum

@filterstring varchar(800)   --过滤条件,我喜欢将字符串传入

as

begin

declare @sql varchar(8000),@colsums varchar(800),@colbys varchar(800)

select @sql='',@colsums='',@colbys=''

select @colsums=@colsums+'sum('+rtrim(colname)+') as '+ rtrim(colname+',' from settings where colsum=1 and hostname=host_name()

set @colsums=substring(@colsums,1,len(@colsums)-1)

select @colbys=@colbys+rtrim(colname) from settings where colby=1 and hostname=host_name()

set @colbys=substring(@colbys,1,len(@colbys)-1)

select @sql='select '+@colbys+','+@colsums+' from tablename '

if  @filterstring<>'' then

    set @sql=@sql+' where ' +@filterstring

set @sql=@sql+' group by '+@colbys

exec(@sql)

end

/*这样就可以满足 1-汇总依据先后次序 2-汇总列任意设置 3-甚至可以指定@tablename

4-汇总依据可设置*/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:106763次
    • 积分:1862
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:11篇
    • 译文:0篇
    • 评论:31条
    最新评论