求SQL查询语句,谢谢各位高手!
原表:
A:销售表
单位 商品名称 数量
郑州 电脑 10
郑州 打印机 20
洛阳 电脑 20
洛阳 打印机 40
开封 打印机 10
开封 电脑 10
B:人数表
单位 人数
郑州 5
洛阳 10
开封 2
想请求实现这种格式:
单位 电脑 电脑人均比例 打印机 打印机人均比例
郑州 10 2 20 4
洛阳 20 2 40 4
开封 10 5 10 5
再次谢谢各位高手!
[解决办法]
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.单位
[解决办法]
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