if OBJECT_ID('tb') is not null
drop table tb
gocreate table tb(
dq varchar(50),
jxs varchar(100),
xl int
)
insert into tb
select '湖南','经销商1','1000' union all
select '湖南','经销商2','2000' union all
select '湖南','经销商3','3000' union all
select '湖南','经销商4','4000' union all
select '湖南','经销商5','5000' union all
select '湖南','经销商6','6000' union all
select '湖南','经销商7','7000' union all
select '北京','经销商8','8000' union all
select '北京','经销商9','9000' union all
select '北京','经销商10','10000' union all
select '北京','经销商11','11000' union all
select '北京','经销商12','12000' union all
select '北京','经销商13','13000' union all
select '北京','经销商14','14000' union all
select '北京','经销商15','15000' union all
select '北京','经销商16','16000' union all
select '北京','经销商17','17000'select * from tb
dq jxs xl
湖南 经销商1 1000
湖南 经销商2 2000
湖南 经销商3 3000
湖南 经销商4 4000
湖南 经销商5 5000
湖南 经销商6 6000
湖南 经销商7 7000
北京 经销商8 8000
北京 经销商9 9000
北京 经销商10 10000
北京 经销商11 11000
北京 经销商12 12000
北京 经销商13 13000
北京 经销商14 14000
北京 经销商15 15000
北京 经销商16 16000
北京 经销商17 17000--期望结果
--(获得各个大区dq 的销量xl最高的前40%经销商jsx的明细)
dq jxs xl
湖南 经销商7 7000
湖南 经销商6 6000
湖南 经销商5 5000
北京 经销商17 17000
北京 经销商16 16000
北京 经销商15 15000
北京 经销商14 14000
为感!
from tb t
where xl in(select top 40 percent xl from tb where dq=t.dq order by xl desc)
from tb t
where xl in(select top 40 percent xl from tb where dq=t.dq order by xl desc)
/**
dq jxs xl
---------- ---------- -----------
湖南 经销商5 5000
湖南 经销商6 6000
湖南 经销商7 7000
北京 经销商14 14000
北京 经销商15 15000
北京 经销商16 16000
北京 经销商17 17000(7 行受影响)
**/
where xl in (select top 40 percent xl from tb where dq=t.dq order by xl desc)
order by dq,xl desc
select '湖南','经销商1','1000' union all
select '湖南','经销商2','2000' union all
select '湖南','经销商3','3000' union all
select '湖南','经销商4','4000' union all
select '湖南','经销商5','5000' union all
select '湖南','经销商6','6000' union all
select '湖南','经销商7','7000' union all
select '北京','经销商8','8000' union all
select '北京','经销商9','8000' union all
select '北京','经销商10','10000' union all
select '北京','经销商11','11000' union all
select '北京','经销商12','12000' union all
select '北京','经销商13','14000' union all
select '北京','经销商14','14000' union all
select '北京','经销商15','15000' union all
select '北京','经销商16','17000' union all
select '北京','经销商17','17000'
结果dq jxs xl
湖南 经销商5 5000
湖南 经销商6 6000
湖南 经销商7 7000
北京 经销商13 14000
北京 经销商14 14000
北京 经销商15 15000
北京 经销商16 17000
北京 经销商17 17000--北京大区本来只应该出来4个,结果有5个了
drop table tb
gocreate table tb(
dq varchar(10),
jxs varchar(10),
xl int
)
insert into tb
select '湖南','经销商1','1000' union all
select '湖南','经销商2','2000' union all
select '湖南','经销商3','3000' union all
select '湖南','经销商4','4000' union all
select '湖南','经销商5','5000' union all
select '湖南','经销商6','6000' union all
select '湖南','经销商7','7000' union all
select '北京','经销商8','8000' union all
select '北京','经销商9','8000' union all
select '北京','经销商10','10000' union all
select '北京','经销商11','11000' union all
select '北京','经销商12','12000' union all
select '北京','经销商13','14000' union all
select '北京','经销商14','14000' union all
select '北京','经销商15','15000' union all
select '北京','经销商16','17000' union all
select '北京','经销商17','17000'
select a.dq,a.jxs,a.xl
from (select *,rn=row_number() over(partition by dq order by xl desc,getdate()) from tb) a
where
rn in(
select top 40 percent rn
from (select *,rn=row_number() over(partition by dq order by xl,getdate()) from tb) b
where b.dq=a.dq order by rn
)
/**
dq jxs xl
---------- ---------- -----------
北京 经销商16 17000
北京 经销商17 17000
北京 经销商15 15000
北京 经销商13 14000
湖南 经销商7 7000
湖南 经销商6 6000
湖南 经销商5 5000(7 行受影响)
**/
可以结贴了,1,2,3楼的方法对我其实也是有用的
3Q