新人,没什么分,谢谢各位达人了
表 tb
数量 名称 场地 时间 价格
100 A 广东 2008-1-2 102
280 B 海南 2008-2-9 120
200 A 海南 2008-1-5 130
109 C 广东 2008-1-3 135
200 A 海南 2008-1-7 200
…………………………………………………………
我想得到如下结果,比如A在1月份期间在哪些场地分别对应多少数量,每个场地所占的数量占总数量的比例
名称 场地 数量 比例
A 广东 100 0.25
海南 400 0.75B 海南 280 1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
表 tb
数量 名称 场地 时间 价格
100 A 广东 2008-1-2 102
280 B 海南 2008-2-9 120
200 A 海南 2008-1-5 130
109 C 广东 2008-1-3 135
200 A 海南 2008-1-7 200
…………………………………………………………
我想得到如下结果,比如A在1月份期间在哪些场地分别对应多少数量,每个场地所占的数量占总数量的比例
名称 场地 数量 比例
A 广东 100 0.25
海南 400 0.75B 海南 280 1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
into #t1
from tb a
join (select 名称, 总数量=sum(数量) from tb where 时间 between @bgnTime and @endTime group by 名称) as s
on b.名称=a.名称
where 时间 between @bgnTime and @endTime
order by a.名称, 场地select
名称 = case when exists (select 1 from #t1 b where b.名称=a.名称 and b.场地<a.场地) then '' else a.场地 end
, 场地
, 数量
, 比例
from #t1 adrop taboe #t1
列前缀 'b' 与查询中所用的表名或别名不匹配。另外,及时修改了以后,好像结果也不对。
我要的是每个名称所对应的所有场地,以及这些场地的数量和每个场地的数量占这些场地总数量的百分比哪位达人再给看看,等两天了。
into #t1
from tb a
join (select 名称, 总数量=sum(数量) from tb where 时间 between @bgnTime and @endTime group by 名称) as b
on b.名称=a.名称
where 时间 between @bgnTime and @endTime
order by a.名称, 场地 select
名称 = case when exists (select 1 from #t1 b where b.名称=a.名称 and b.场地<a.场地) then '' else a.场地 end ,
场地 ,
数量 ,
比例
from #t1 a drop taboe #t1
差别如下:
要把相同的场地的数量累加。
例如 A 有两个场地 海南和广东, 在统计的时候要把海南的数量加起来算一个。
下面即使修改过的语句也做不到
select a.名称, 场地, 数量, 比例 = cast(数量*100.0/总数量 as numeric(5,2))
into #t1
from tb a
join (select 名称, 总数量=sum(数量) from tb where 时间 between @bgnTime and @endTime group by 名称) as b
on b.名称=a.名称
where 时间 between @bgnTime and @endTime
order by a.名称, 场地select
名称 = case when exists (select 1 from #t1 b where b.名称=a.名称 and b.场地<a.场地) then '' else a.名称 end
, 场地
, 数量
, 比例
from #t1 adrop taboe #t1
insert into tb values(100, 'A', '广东', '2008-1-2', 102 )
insert into tb values(280, 'B', '海南', '2008-2-9', 120 )
insert into tb values(200, 'A', '海南', '2008-1-5', 130 )
insert into tb values(109, 'C', '广东', '2008-1-3', 135 )
insert into tb values(200, 'A', '海南', '2008-1-7', 200 )
godeclare @时间 as varchar(7)
set @时间 = '2008-01'select t1.* , 比例 = cast(t1.数量*1.0/t2.数量 as decimal(18,2)) from
(select 名称 , 场地 , sum(数量) 数量 from tb where convert(varchar(7),时间,120) = @时间 group by 名称 , 场地) t1,
(select 名称 , sum(数量) 数量 from tb where convert(varchar(7),时间,120) = @时间 group by 名称) t2
where t1.名称 = t2.名称
order by t1.名称drop table tb/*
名称 场地 数量 比例
---------- ---------- ----------- --------------------
A 广东 100 .20
A 海南 400 .80
C 广东 109 1.00
(所影响的行数为 3 行)
*/