在快速报表中可以实现报表分组,如每一格部门做一个组,统计数据。如何用EhLib制作分组报表,请指教

解决方案 »

  1.   

    建議分組數據建成本地表,關聯EHLib,直接生成要看你要做成什麼樣的分組報表,把實際數據貼出來,看看.
      

  2.   

    create procedure p_qry @TableName sysname, --表名
     @纵轴 sysname,  --交叉表最左面的列
     @纵轴名称 sysname,--交叉表中显示的中文名称
     @横轴 sysname,  --交叉表最上面的列
     @表体内容 sysname, --交叉表的数数据字段
     @是否加横向合计 bit,--为1时在交叉表横向最右边加横向合计
     @是否家纵向合计 bit, --为1时在交叉表纵向最下边加纵向合计
     @Where条件 varchar(255) as
    declare @s nvarchar(4000),@sql varchar(8000)
    --判断横向字段是否大于纵向字段数目,如果是,则交换纵横字段--生成交叉表处理语句
    set @s='
    set @s=''''
    select @s=@s+'',[''+cast(['+@横轴+'] as varchar)+'']=sum(case ['+@横轴
     +'] when ''''''+cast(['+@横轴+'] as varchar)+'''''' then '+@表体内容+' else 0 end)''
    from ['+@TableName+']
    group by ['+@横轴+']'
    exec sp_executesql @s
     ,N'@s varchar(8000) out'
     ,@sql out
    --是否生成合计字段的处理
    declare @sum1 varchar(200),@sum2 varchar(200),@sum3 varchar(200)
    select @sum1=case @是否加横向合计 
      when 1 then ',[合计]=sum('+@表体内容+')'
      else '' end
     ,@sum2=case @是否家纵向合计 
      when 1 then '['+@纵轴名称+'] =case grouping(['
       +@纵轴+']) when 1 then ''合计'' else cast(['
       +@纵轴+'] as varchar) end '
      else @纵轴+' '+@纵轴名称 end
     ,@sum3=case @是否家纵向合计
      when 1 then ' with rollup'
      else '' end
    --生成交叉表
    exec('select '+@sum2+@sql+@sum1+'
    from ['+@TableName+'] '+
    @Where条件+
    ' group by ['+@纵轴+']'+@sum3)
    go
    这是我原先找的一个SQLSERVER存储过程,流程是将表名和横轴及纵轴等做为参数传入存储过程,由存储过程将数据计算为分组数据后通过select返回分组数据,在DBGrid的数据集中调用此存储过程就可以得出分组的数据,从而直接显示在DBGrid中