34,590
社区成员
发帖
与我相关
我的任务
分享
create table t1(类型名称 varchar(20),value varchar(20))
insert into t1 values('公司分类', 'A')
insert into t1 values('公司分类', 'B')
insert into t1 values('业务分类', '域名业务')
insert into t1 values('业务分类', '空间业务')
create table t2(日期 datetime,公司分类 varchar(20),业务分类 varchar(20),金额 int)
insert into t2 values('2012-1-1', 'A', '域名业务', 200)
insert into t2 values('2012-1-2', 'A', '空间业务', 100)
insert into t2 values('2012-1-2', 'B', '域名业务', 200)
insert into t2 values('2012-1-3', 'B', '空间业务', 200)
go
declare @sql varchar(8000)
set @sql = 'select convert(varchar(7),日期,120) [月份] '
select @sql = @sql + ' , sum(case item when ''' + item + ''' then 金额 else 0 end) [' + item + ']'
from (select distinct item = 类型名称 + '_' + value from t1) as a
set @sql = @sql + ',sum(金额) 合计 from (select 日期 , item = ''公司分类_''+公司分类 , 金额 from t2 union all select 日期 , item = ''业务分类_''+业务分类 , 金额 from t2) t group by convert(varchar(7),日期,120)'
exec(@sql)
/*
月份 公司分类_A 公司分类_B 业务分类_空间业务 业务分类_域名业务 合计
------- ----------- ----------- ----------- ----------- -----------
2012-01 300 400 300 400 1400
*/
set @sql = 'select convert(varchar(7),日期,120) [月份] '
select @sql = @sql + ' , sum(case item when ''' + item + ''' then 金额 else 0 end) [' + item + ']'
from (select distinct item = 类型名称 + '_' + value from t1) as a
set @sql = @sql + ',cast(sum(金额)/2.0 as decimal(18,2)) 合计 from (select 日期 , item = ''公司分类_''+公司分类 , 金额 from t2 union all select 日期 , item = ''业务分类_''+业务分类 , 金额 from t2) t group by convert(varchar(7),日期,120)'
exec(@sql)
/*
月份 公司分类_A 公司分类_B 业务分类_空间业务 业务分类_域名业务 合计
------- ----------- ----------- ----------- ----------- --------------------
2012-01 300 400 300 400 700.00
*/
drop table t1 , t2
create table t1(类型名称 varchar(20),value varchar(20))
insert into t1 values('公司分类', 'A')
insert into t1 values('公司分类', 'B')
insert into t1 values('业务分类', '域名业务')
insert into t1 values('业务分类', '空间业务')
create table t2(日期 datetime,公司分类 varchar(20),业务分类 varchar(20),金额 int)
insert into t2 values('2012-1-1', 'A', '域名业务', 200)
insert into t2 values('2012-1-2', 'A', '空间业务', 100)
insert into t2 values('2012-1-2', 'B', '域名业务', 200)
insert into t2 values('2012-1-3', 'B', '空间业务', 200)
go
declare @sql varchar(8000)
set @sql = 'select convert(varchar(7),日期,120) [月份] '
select @sql = @sql + ' , sum(case item when ''' + item + ''' then 金额 else 0 end) [' + item + ']'
from (select distinct item = 类型名称 + '_' + value from t1) as a
set @sql = @sql + ',sum(金额) 合计 from (select 日期 , item = ''公司分类_''+公司分类 , 金额 from t2 union all select 日期 , item = ''业务分类_''+业务分类 , 金额 from t2) t group by convert(varchar(7),日期,120)'
exec(@sql)
drop table t1 , t2
/*
月份 公司分类_A 公司分类_B 业务分类_空间业务 业务分类_域名业务 合计
------- ----------- ----------- ----------- ----------- -----------
2012-01 300 400 300 400 1400
*/