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

求SQL查询语句,多谢

2012-01-22 
求SQL查询语句,谢谢各位高手!原表:A:销售表单位商品名称数量郑州电脑10郑州打印机20洛阳电脑20洛阳打印机4

求SQL查询语句,谢谢各位高手!
原表:
A:销售表
单位 商品名称 数量
郑州 电脑 10
郑州 打印机 20
洛阳 电脑 20
洛阳 打印机 40
开封 打印机 10
开封 电脑 10
B:人数表
单位 人数
郑州 5
洛阳 10
开封 2

想请求实现这种格式:
单位 电脑 电脑人均比例 打印机 打印机人均比例
郑州 10 2 20 4  
洛阳 20 2 40 4  
开封 10 5 10 5 

再次谢谢各位高手!



[解决办法]

SQL code
Select a.单位,b.数量 as 电脑,Cast(b.数量/a.人数 as int) as 电脑人均比例,c.数量 as 打印机,cast(c.数量/a.人数 as int) as 打印机人均比例From 人数表 aLeft Join (Select 单位,数量 From 销售表 Where 商品名称='电脑') b On b.单位=a.单位Left Join (Select 单位,数量 From 销售表 Where 商品名称='打印机') c On c.单位=a.单位
[解决办法]
create table 销售表(单位 char(10), 商品名称 char(20), 数量 int )
insert 销售表 select 
'郑州' , '电脑' , 10 union all select 
'郑州' , '打印机', 20 union all select 
'洛阳' , '电脑' , 20 union all select 
'洛阳' , '打印机', 40 union all select 
'开封' , '打印机' , 10 union all select 
'开封' , '电脑' , 10 
create table 人数表 (单位 char(10), 人数 int ) 
insert 人数表 select 
'郑州' , 5 union all select 
'洛阳' , 10 union all select 
'开封' , 2 

select 单位,sum(case 商品名称 when '电脑' then 数量 else 0 end ) 电脑 ,
sum(case 商品名称 when '电脑' then 数量 else 0 end )*1/(select 人数 from 人数表 where 单位=a.单位) 电脑人均比例,
sum(case 商品名称 when '打印机' then 数量 else 0 end )打印机,
sum(case 商品名称 when '打印机' then 数量 else 0 end )*1/(select 人数 from 人数表 where 单位=a.单位) 打印机人均比例
 from 销售表 a group by 单位
[解决办法]
select a.单位,sum(case a.商品名称 when '电脑 ' then 数量 else 0 end ) 电脑 , 
sum(case a.商品名称 when '电脑 ' then 数量 else 0 end )*1/ b.人数 电脑人均比例, 
sum(case a.商品名称 when '打印机 ' then 数量 else 0 end )打印机, 
sum(case a.商品名称 when '打印机 ' then 数量 else 0 end )*1/b.人数 打印机人均比例 
 from 销售表 a inner join 人数表 b on a.单位=b.单位 group by a.单位
[解决办法]
SQL code
create table 销售表([单位] nvarchar(10),  [商品名称] nvarchar(20),  [数量] int ) insert 销售表 select  '郑州'  ,   '电脑'  ,   10  union all select  '郑州'  ,   '打印机',   20  union all select  '洛阳'  ,   '电脑'   ,   20 union all select  '洛阳'  ,   '打印机',   40 union all select  '开封'  ,   '打印机' ,   10 union all select  '开封'  ,   '电脑'   ,   10  create table 人数表 (单位 nvarchar(10),   人数 int )  insert 人数表 select  '郑州'  ,   5  union all select  '洛阳'  ,   10 union all select  '开封'  ,   2  --drop table 人数表,销售表declare @s nvarchar(4000)set @s=''select @s=@s+','+quotename(商品名称)+'=sum( case 商品名称 when '+quotename(商品名称,'''')+' then 数量 else 0 end),'            +'['+商品名称+'人均比例]=sum( case 商品名称 when '+quotename(商品名称,'''')+' then 数量/b.人数 else 0 end)'from     销售表 group by 商品名称--print @sexec('select a.单位'+@s+'from 销售表 a join 人数表 b on a.单位=b.单位 group by a.单位')单位         打印机         打印机人均比例     电脑          电脑人均比例      ---------- ----------- ----------- ----------- ----------- 开封         10          5           10          5洛阳         40          4           20          2郑州         20          4           10          2 

热点排行