首先来说,数据库中的是二维表格,不可能是二级表头,所以你那种格式要在前台去处理SQL中可以出这种效果:
创建人     一月_现金 一月_支票 一月_分计 ...                  二月    

解决方案 »

  1.   

    那么是否可以得出这样的格式呢?
    创建人   现金  支票  分计    现金  支票  分计 。总计
    a        600    900  150     200    600   800。 15000
    b        800    200  1000    0       0      0。 10000
    c        0       0    0      100    300   400。 20000
      

  2.   

    --那当然可以declare @s varchar(8000)
    set @s=''
    select @s=@s+',现金=sum(case dt when '''+dt
    +''' then 现金 else 0 end),支票=sum(case dt when '''+dt
    +''' then 支票 else 0 end),分计=sum(case dt when '''+dt
    +''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
    from(select distinct dt=convert(char(7),创建日期,120) from 表 
    )a group by dt
    exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
    from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
    )a group by 创建人')
      

  3.   

    --测试--测试数据
    create table 表(创建人 varchar(10),创建日期 datetime,现金 int,支票 int)
    insert 表 select 'a','2004-01-01',100,300
    union all select 'b','2004-01-01',800,200
    union all select 'a','2004-01-01',100,300
    union all select 'a','2004-01-02',400,300
    union all select 'c','2004-02-01',100,300
    union all select 'a','2004-02-01',100,300
    union all select 'a','2004-02-01',100,300
    go--处理
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',现金=sum(case dt when '''+dt
    +''' then 现金 else 0 end),支票=sum(case dt when '''+dt
    +''' then 支票 else 0 end),分计=sum(case dt when '''+dt
    +''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
    from(select distinct dt=convert(char(7),创建日期,120) from 表 
    )a group by dt
    exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
    from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
    )a group by 创建人')
    go--删除测试
    drop table 表/*--测试结果创建人  现金  支票  分计  现金  支票   分计  总计  
    ------ ----- ----- ----- ----- ----- ----- ------
    a      600   900   1500  200   600   800   2300
    b      800   200   1000  0     0     0     1000
    c      0     0     0     100   300   400   400
    --*/
      

  4.   

    真的是太佩服你了,
    不过我还想问一下,如果是你说的这样:
    创建人 1月-现金  1月-支票  1月-分计   。。总计
    a      600   900   1500  200   600   800   2300
    b      800   200   1000  0     0     0     1000
    c      0     0     0     100   300   400   400
    这样的怎么做呢?
      

  5.   

    declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+mm+'月-现金]=sum(case dt when '''+dt
    +''' then 现金 else 0 end),['+mm+'月-支票]=sum(case dt when '''+dt
    +''' then 支票 else 0 end),['+mm+'月-分计]=sum(case dt when '''+dt
    +''' then isnull(现金,0)+isnull(支票,0) else 0 end)'
    from(select distinct dt=convert(char(7),创建日期,120),mm=datename(month,创建日期)
    from 表 
    )a
    exec('select 创建人'+@s+',总计=sum(isnull(现金,0)+isnull(支票,0))
    from(select 创建人,dt=convert(char(7),创建日期,120),现金,支票 from 表
    )a group by 创建人')