首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请一个查询语句【附测试数据】解决办法

2012-04-23 
请一个查询语句【附测试数据】SQL code[codeSQL]goif OBJECT_ID(report)is not nulldrop table reportgoc

请一个查询语句【附测试数据】

SQL code
[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.......*/
[/code]

[解决办法]
SQL code
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*/--应该这样,楼上作废
[解决办法]
SQL code
我那号被封了,换这个号,你试试下面的语句,我觉得不应该是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)

热点排行