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
发票表
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
发票表
[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 操作消除了空值。
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(地税发票金额)
测试环境:
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