SQL实现:--原始数据:测试2天
create table #T (日期 datetime,姓名 varchar(10),用量 int)
insert #T
select '2007-1-1','李鹏',34 union all
select '2007-1-1','张刚',67 union all
select '2007-1-1','周树人',88 union all
select '2007-1-1','马明',67 union all
select '2007-1-2','李鹏',45 union all
select '2007-1-2','张刚',23 union all
select '2007-1-2','周树人',56 union all
select '2007-1-2','马明',23declare @sql varchar(8000)
select @sql=isnull(@sql+',','select 日期,')+'['+姓名+']=sum(case 姓名 when '''+姓名+''' then 用量 else 0 end)' from #T group by 姓名
set @sql=@sql+' from #T group by 日期'exec (@sql)/*
日期                                                     李鹏          马明          张刚          周树人         
------------------------------------------------------ ----------- ----------- ----------- ----------- 
2007-01-01 00:00:00.000                                34          67          67          88
2007-01-02 00:00:00.000                                45          23          23          56
*/--删除测试
drop table #T

解决方案 »

  1.   

    表中有以下三个字段:    日期,姓名,用量 能不能用表格控件或水晶报表或其它的方法形成这样的表        李鹏 张刚 周树人 马明 
    2007-1-1 34 67 88 67 
    2007-1-2 45 23 56 23 
    2007-1-3 56 45 34 45 
    2007-1-4 56 45 34 45 
    2007-1-5 67 32 37 67 
    2007-1-6 34 34 32 34 
    2007-1-7 78 45 47 88 
    --------------------------------------------------------
    --静态SQL,指姓名只有这四个人。
    select convert(varchar(10),日期,120) 日期
      sum(case 姓名 when '李鹏' then 用量 else 0 end) '李鹏',
      sum(case 姓名 when '张刚' then 用量 else 0 end) '张刚',
      sum(case 姓名 when '周树人' then 用量 else 0 end) '周树人',
      sum(case 姓名 when '马明' then 用量 else 0 end) '马明'
    from tb
    group by convert(varchar(10),日期,120)
      

  2.   

    --动态SQL,指姓名不止四个人。
    declare @sql varchar(8000) 
    set @sql =  'select convert(varchar(10),日期,120) 日期' 
    select @sql = @sql + ', sum(case 姓名 when ''' + cast(姓名 as varchar) + ''' then 用量 else 0 end) [' + cast(姓名 as varchar) + ']' 
    from (select distinct 姓名 from tb) as a 
    set @sql = @sql +  ' from tb group by convert(varchar(10),日期,120)' 
    exec(@sql)  
      

  3.   

    --静态SQL,指姓名只有这四个人。 
    select convert(varchar(10),日期,120) 日期,
      sum(case 姓名 when '李鹏'   then 用量 else 0 end) '李鹏', 
      sum(case 姓名 when '张刚'   then 用量 else 0 end) '张刚', 
      sum(case 姓名 when '周树人' then 用量 else 0 end) '周树人', 
      sum(case 姓名 when '马明'   then 用量 else 0 end) '马明' 
    from tb 
    group by convert(varchar(10),日期,120) --动态SQL,指姓名不止四个人。
    declare @sql varchar(8000) 
    set @sql =  'select convert(varchar(10),日期,120) 日期' 
    select @sql = @sql + ', sum(case 姓名 when ''' + cast(姓名 as varchar) + ''' then 用量 else 0 end) [' + cast(姓名 as varchar) + ']' 
    from (select distinct 姓名 from tb) as a 
    set @sql = @sql +  ' from tb group by convert(varchar(10),日期,120)' 
    exec(@sql)