1、
select
    id,
    日期,
    sum(case 类型 when '增值税发票' then 金额 else 0 end) as 增值税发票金额,
    sum(case 类型 when '普通发票'   then 金额 else 0 end) as 普通发票金额,
    sum(case 类型 when '地税发票'   then 金额 else 0 end) as 地税发票金额
from
    发票表
group by
    id,日期2、
select
    sum(case 类型 when '增值税发票' then 金额 else 0 end) as 增值税发票金额,
    sum(case 类型 when '普通发票'   then 金额 else 0 end) as 普通发票金额,
    sum(case 类型 when '地税发票'   then 金额 else 0 end) as 地税发票金额
from
    发票表

解决方案 »

  1.   

    /*----------去掉[create]前的括号--------------*/
    [create] table 发票表
    (id int,金额 int,日期 datetime,类型 varchar(20))insert 发票表 values (1,500,'2005-01-01','增值税发票')
    insert 发票表 values (2,600,'2005-07-09','增值税发票')
    insert 发票表 values (3,300,'2005-02-03','普通发票')
    insert 发票表 values (4,1000,'2005-07-02','普通发票')
    insert 发票表 values (5,200,'2005-06-06','地税发票')declare @sql varchar(2000)
    set @sql='select id,日期'
    select @sql=@sql+',['+类型+'金额]=isnull(sum(case when 类型='''+类型+''' then 金额 end),0)'
    from 发票表
    group by 类型
    select @sql=@sql+' from 发票表 group by id,日期 order by id'
    exec(@sql)
    drop table 发票表
    id          日期                                                     地税发票金额      普通发票金额      增值税发票金额     
    ----------- ------------------------------------------------------ ----------- ----------- ----------- 
    1           2005-01-01 00:00:00.000                                0           0           500
    2           2005-07-09 00:00:00.000                                0           0           600
    3           2005-02-03 00:00:00.000                                0           300         0
    4           2005-07-02 00:00:00.000                                0           1000        0
    5           2005-06-06 00:00:00.000                                200         0           0警告: 聚合或其它 SET 操作消除了空值。
      

  2.   

    select
        id,
        日期,
        (case 类型 when '增值税发票' then 金额 else 0 end) as 增值税发票金额,
        (case 类型 when '普通发票'   then 金额 else 0 end) as 普通发票金额,
        (case 类型 when '地税发票'   then 金额 else 0 end) as 地税发票金额
    from
        发票表
    compute sum(增值税发票金额),sum(普通发票金额),sum(地税发票金额)
      

  3.   

    楼主用一下这个看下是不是要这样的结果
    测试环境:
    create table #tables(id int,price int,
    data datetime,lx varchar(20))
    insert  #tables values(1,500,2005-1-1,'增值税发票')
    insert #tables values(2,600,2005-7-9,'增值税发票')
    insert #tables values(3,300,2005-2-3,'普通发票')
    insert #tables values(4,1000,2005-7-2,'普通发票')
    insert #tables values(5,200,2005-6-6,'地税发票')select id=(case  when id is null then '合计' else max(convert(char(4),id,120)) end),max(data) as data,
    sum(case lx when '增值税发票' then price else 0 end)as 增值税发票
    ,sum(case lx when '普通发票' then price else 0 end)as 普通发票
    ,sum(case lx when '地税发票' then price else 0 end)as 地税发票
    from #tables
    group by id with rollup