有这样一张表:  姓名    日期           销售金额
  张三   2007-8-20         800
  张三   2007-8-25         100
  李四   2007-8-22         1200
  张三   2007-9-20         650
  李四   2007-9-25         970
 现在要做一条查询,把这个表格变成:   姓名  8月份   9月份
   张三  900     650
   李四  1200    970应该怎样做啊?

解决方案 »

  1.   

    drop table tbtest
    go
    create table tbtest(姓名 varchar(10),日期 datetime,销售金额 int)
    insert into tbtest
    select '张三','2007-8-20',800
    union all select '张三','2007-8-25',100
    union all select '李四','2007-8-22',1200
    union all select '张三','2007-9-20',650
    union all select '李四','2007-9-25',970declare @sql varchar(8000)
    set @sql=''
    select @sql=@sql+',sum(case when convert(char(7),日期,120)='''+日期+''' then 销售金额 else 0 end) as '''+日期+''''
    from (select distinct convert(char(7),日期,120) 日期 from tbtest)t
    order by 日期
    exec('select 姓名'+@sql+' from tbtest group by 姓名')
    /*
    姓名         2007-08     2007-09     
    ---------- ----------- ----------- 
    李四         1200        970
    张三
      

  2.   

    ...为了星星..又要叉表一次了
    select  姓名,
    sum(case when month(日期)=8 then 销售金额 else 0 end) [8月份],
    sum(case when month(日期)=9 then 销售金额 else 0 end) [9月份]
    from  表
    group by 姓名