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
为感!

解决方案 »

  1.   

    select * 
    from tb t
    where xl in(select top 40 percent xl from tb where dq=t.dq order by xl desc)
      

  2.   

    select * 
    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 行受影响)
    **/
      

  3.   

    select  dq,jxs,xl from tb t
    where xl in (select top 40 percent xl from tb where dq=t.dq order by xl desc)
    order by dq,xl desc
      

  4.   

    1,2,3楼的还不是我想要的结果,如果将数据改为如下,就是排名靠前的有销量xl 相同的出来的个数就多了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'
    结果dq jxs xl
    湖南 经销商5 5000
    湖南 经销商6 6000
    湖南 经销商7 7000
    北京 经销商13 14000
    北京 经销商14 14000
    北京 经销商15 15000
    北京 经销商16 17000
    北京 经销商17 17000--北京大区本来只应该出来4个,结果有5个了
      

  5.   

    if OBJECT_ID('tb') is not null
    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 行受影响)
    **/
      

  6.   

    5楼的OK了,
    可以结贴了,1,2,3楼的方法对我其实也是有用的
    3Q