请一个查询语句【附测试数据】
[code=SQL]goif OBJECT_ID('report')is not nulldrop table reportgocreate table report(销售员 varchar(10),销售组 varchar(8),产品名称 varchar(10),产品组别 varchar(10),销售金额 money,销售日期 date,)goinsert reportselect '周','A','产品1','产品甲组',10000,'2012-04-01' union allselect '王','B','产品2','产品乙组',0,'2012-04-03' union allselect '赵','B','产品1','产品甲组',50000,'2012-04-10' union allselect '李','C','产品3','产品甲组',30000,'2012-04-09' union allselect '孙','B','产品2','产品乙组',1,'2012-04-11' goselect * from report--/**要求分别按销售人员和销售小组统计每种产品的个数、销售额、总额。--/**每种产品只属于一个产品组,每个产品组有多个产品。--/**实际数据有多个产品组和销售组。--/**比如按小组统计,需如下结果(只说明格式):/*销售小组 产品甲组个数 产品甲组金额 产品乙组个数 产品乙组金额 总金额A 3 30000 0 0 30000B 0 0 2 200 200.......*/
goif OBJECT_ID('report')is not nulldrop table reportgocreate table report(销售员 varchar(10),销售组 varchar(8),产品名称 varchar(10),产品组别 varchar(10),销售金额 money,销售日期 date,)goinsert reportselect '周','A','产品1','产品甲组',10000,'2012-04-01' union allselect '王','B','产品2','产品乙组',0,'2012-04-03' union allselect '赵','B','产品1','产品甲组',50000,'2012-04-10' union allselect '李','C','产品3','产品甲组',30000,'2012-04-09' union allselect '孙','B','产品2','产品乙组',1,'2012-04-11' godeclare @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 reportgroup by 产品组别exec('select 销售组'+@str+',sum(销售金额) as 总金额 from report group by 销售组')--是你的结果有问题还是我的算法错误?不过我按照你的结果分析,不晓得是怎么回事。/*销售组 产品甲组个数 产品甲组金额 产品乙组个数 产品乙组金额 总金额A 1 10000.00 0 0.00 10000.00B 1 50000.00 2 1.00 50001.00C 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 reportgroup 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)