日期:2014-05-18 浏览次数:20538 次
[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)