create table [tb]([编号] int,[部门] varchar(10),[金额] int,[类型] varchar(4)) insert [tb] select 1,'销售部',100,'提成' union all select 2,'财务部',200,'补贴' union all select 3,'销售部',120,'奖金' union all select 4,'人事部',300,'其他' union all select 5,'应用方案部',500,'奖金' union all select 6,'应用方案部',50,'补贴' select * from tb ---查询--- declare @sql varchar(8000) select @sql=isnull(@sql+',','') +'sum(case when 部门='''+部门+''' then 金额 else 0 end) as ['+部门+']' from (select distinct 部门 from tb) t set @sql='select 编号=row_number() over (order by getdate()),' +@sql+',类型 from tb group by 类型' exec (@sql)