当前位置: 代码迷 >> Sql Server >> 求SQL查询语句 多谢
  详细解决方案

求SQL查询语句 多谢

热度:59   发布时间:2016-04-24 10:34:13.0
求SQL查询语句 谢谢
本帖最后由 erpcsu 于 2014-01-14 11:08:52 编辑
COPMA客户基本资料表;CMSMV业务员基本资料表;COP01客户销货明细表

SELECT CMSMV.MV002 ,COPMA.MA002 ,SUM(COP01.TH013) as COP01TH013  

FROM COP01  Left JOIN CMSMV 
          On CMSMV.MV001=COP01.TG006
 Left JOIN COPMA  
        On COPMA.MA001=COP01.TG004  

GROUP BY CMSMV.MV002,COPMA.MA002 
ORDER BY CMSMV.MV002,SUM(COP01.TH013) DESC


通过上面的SQL语句得到下面结果:

-------------------------------
业务员    客户名称    销售金额
张三      A           60000
张三      B           55000
张三      C           50000
张三      D           49000
张三      E           46000
张三      F           43000
张三      G           35000
李四      GG          9000
李四      HH          1000
-------------------------------

请如何只显示业务员销售额前五名的客户
想得到结果
-------------------------------
业务员    客户名称    销售金额
张三      A           60000
张三      B           55000
张三      C           50000
张三      D           49000
张三      E           46000

李四      GG          9000
李四      HH          1000
-------------------------------
谢谢
------解决方案--------------------
select top 5 * 
from (
SELECT CMSMV.MV002 ,COPMA.MA002 ,SUM(COP01.TH013) as COP01TH013  

FROM COP01  Left JOIN CMSMV 
          On CMSMV.MV001=COP01.TG006
 Left JOIN COPMA  
        On COPMA.MA001=COP01.TG004  

GROUP BY CMSMV.MV002,COPMA.MA002 )a
ORDER BY MV002,COP01TH013   DESC

------解决方案--------------------
加一个top 5 就可以了:

SELECT top 5 CMSMV.MV002 ,COPMA.MA002 ,SUM(COP01.TH013) as COP01TH013  

FROM COP01  Left JOIN CMSMV 
          On CMSMV.MV001=COP01.TG006
 Left JOIN COPMA  
        On COPMA.MA001=COP01.TG004  

GROUP BY CMSMV.MV002,COPMA.MA002 
ORDER BY CMSMV.MV002,COP01TH013 DESC
------解决方案--------------------
sqlserver版本多少?回复请引用
------解决方案--------------------
引用:
按照你们的只有五条记录
李四的销售前五名客户不显示了


你试试,适合2005及以后的版本:


select *
from 
(
select *,
   ROW_NUMBER() over(partition by MV002 order by COP01TH013 desc) as rownum  
from 
(
SELECT  CMSMV.MV002 ,COPMA.MA002 ,SUM(COP01.TH013) as COP01TH013,


FROM COP01  Left JOIN CMSMV 
  On CMSMV.MV001=COP01.TG006
 Left JOIN COPMA  
On COPMA.MA001=COP01.TG004  

GROUP BY CMSMV.MV002,COPMA.MA002 
)t
)t
where rownum <= 5

------解决方案--------------------
SELECT  MV002 ,
        MA002 ,
        COP01TH013
FROM    ( SELECT    MV002 ,
                    MA002 ,
                    COP01TH013 ,
                    ROW_NUMBER() OVER ( PARTITION BY MV002 ORDER BY COP01TH013 DESC ) id
  相关解决方案