日期:2014-05-18 浏览次数:20674 次
[code=SQL]
go
if OBJECT_ID('report')is not null
drop table report
go
create table report(
销售员 varchar(10),
销售组 varchar(8),
产品名称 varchar(10),
产品组别 varchar(10),
销售金额 money,
销售日期 date,
)
go
insert report
select '周','A','产品1','产品甲组',10000,'2012-04-01' union all
select '王','B','产品2','产品乙组',0,'2012-04-03' union all
select '赵','B','产品1','产品甲组',50000,'2012-04-10' union all
select '李','C','产品3','产品甲组',30000,'2012-04-09' union all
select '孙','B','产品2','产品乙组',1,'2012-04-11'
go
select * from report
--/**要求分别按销售人员和销售小组统计每种产品的个数、销售额、总额。
--/**每种产品只属于一个产品组,每个产品组有多个产品。
--/**实际数据有多个产品组和销售组。
--/**比如按小组统计,需如下结果(只说明格式):
/*
销售小组 产品甲组个数 产品甲组金额 产品乙组个数 产品乙组金额 总金额
A 3 30000 0 0 30000
B 0 0 2 200 200
.......
*/
go
if OBJECT_ID('report')is not null
drop table report
go
create table report(
销售员 varchar(10),
销售组 varchar(8),
产品名称 varchar(10),
产品组别 varchar(10),
销售金额 money,
销售日期 date,
)
go
insert report
select '周','A','产品1','产品甲组',10000,'2012-04-01' union all
select '王','B','产品2','产品乙组',0,'2012-04-03' union all
select '赵','B','产品1','产品甲组',50000,'2012-04-10' union all
select '李','C','产品3','产品甲组',30000,'2012-04-09' union all
select '孙','B','产品2','产品乙组',1,'2012-04-11'
go
declare @str varchar(max)
set @str=''
select @str=@str+','+产品组别+'个数=sum(case when 产品组别='+QUOTENAME(产品组别,'''')+
' then 1 else 0 end),'+产品组别+'金额=sum(case when 产品组别='+QUOTENAME(产品组别,'''')+
' then 销售金额 else 0 end)' from report
group by 产品组别
exec('select 销售组'+@str+',sum(销售金额) as 总金额 from report group by 销售组')
--是你的结果有问题还是我的算法错误?不过我按照你的结果分析,不晓得是怎么回事。
/*
销售组 产品甲组个数 产品甲组金额 产品乙组个数 产品乙组金额 总金额
A 1 10000.00 0 0.00 10000.00
B 1 50000.00 2 1.00 50001.00
C 1 30000.00 0 0.00 30000.00
*/
--应该这样,楼上作废
------解决方案--------------------
我那号被封了,换这个号,你试试下面的语句,我觉得不应该是quotename的问题
declare @str varchar(max)
set @str=''
select @str=@str+','+产品组别+'个数=sum(case when 产品组别='+'''产品组别'''+
' then 1 else 0 end),'+产品组别+'金额=sum(case when 产品组别='+'''产品组别'''+
' then 销售金额 else 0 end)' from report
group by 产品组别
exec('select 销售组'+@str+',sum(销售金额) as 总金额 from report group by 销售组')
------解决方案--------------------
declare @str varchar(max)
set @str='with t as (select 销售组'
select @str=@str+',sum(case when 产品组别='''+产品组别+'''
then 1 else 0 end) '+rtrim(产品组别)+'个数'+',sum(case when 产品组别='''+产品组别+'''
then 销售金额 else 0 end) '+rtrim(产品组别)+''+'金额' from report
group by 产品组别
set @str=@str+', sum(销售金额) as 总金额 from report group by 销售组) select *from t'
print @str
exec(@str)