表内容 项目不确定有多少个
表内容
公司 项目 价格
a 房费 10
a 房费 10
a 车费 10
b 车费 10
b 车费 10
b 门费 50
生成内容
公司 房费 车费 门费 总计
a 20 10 0 30
b 0 20 50 70
汇总 20 30 50 100
------解决方案--------------------
Declare @sql varchar(max)
set @sql=STUFF((select ','+QUOTENAME(project) from [Table_3] group by [project] FOR XML PATH('')) ,1,1,'')
set @sql='select * from [Table_3] t
pivot (sum([price])for [project] in ('+@sql+')) a '
exec(@sql)
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-31 15:18:30
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([公司] varchar(10),[项目] varchar(4),[价格] int)
insert [tb]
select 'a','房费',10 union all
select 'a','房费',10 union all
select 'a','车费',10 union all
select 'b','车费',10 union all
select 'b','车费',10 union all
select 'b','门费',50
--------------开始查询--------------------------
declare @sql varchar(8000)
set @sql = 'select isnull(公司,''汇总'') as 公司 '
select @sql = @sql + ' , sum(case 项目 when ''' + 项目 + ''' then 价格 else 0 end) [' + 项目 + ']'
from (select distinct 项目 from tb) as a
set @sql = @sql + ',sum(价格) as 总计 from tb group by 公司 with rollup'
exec(@sql)
----------------结果----------------------------
/* 公司 车费 房费 门费 总计
---------- ----------- ----------- ----------- -----------
a 10 20 0 30
b 20 0 50 70
汇总 30 20 50 100
(3 行受影响)
*/