日期:2014-05-18  浏览次数:20499 次

求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 人数表 a
Left 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 @s
exec('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