要解决的问题是:求出部门号为(1,2,6,10)每个部门中,卖数前20名的商品,和对应的卖数。语句如下:
SELECT A.部门编号,A.商品编号,SUM(A.周卖数) as 卖数
   INTO #临时表
        FROM 卖数周单 A INNER JOIN 店铺 B
                        ON A.店铺CD=B.店铺CD
             WHERE  A.年周 BETWEEN '200520' AND '200536'
                    AND    A.部门 IN  (1,2,6,10)
                    AND    B.店铺种类=1
SELECT *
      FROM #临时表 C
           WHERE  20>(SELECT COUNT(1) 
                              FROM #临时表 D 
                                   WHERE  D.卖数>C.卖数 AND D.部门编号=C.部门编号)其实前一个SELECT语句没啥问题能看的懂,就是后一个SELECT语句中 WHERE 部分,他是如何执行的。从大方面讲,也知道是选出所需要的每个部门中,卖数前20位的商品和商品卖数合集。但是我实在搞不明白它是如何执行的,或者说,在没有例子的情况下,用什么思路能写出上面的语句。请高手赐教!~~

解决方案 »

  1.   

    楼主可以看看这个贴子. 跟你这个意思一样的.不过那个在一个表中,不需要联表,也即,你这两个表按店铺编号join之后,跟那个就一模一样了http://community.csdn.net/Expert/topic/4826/4826331.xml?temp=.9152643
      

  2.   

    SELECT * FROM (            
                 SELECT A.部门编号,A.商品编号,SUM(A.周卖数) as 卖数 from 表1 A
                 WHERE  A.年周 BETWEEN '200520' AND '200536'
                        AND    A.部门 IN  (1,2,6,10)
                 GROUP BY A.部门编号,A.商品编号 
                  ) B
                  ORDER BY B.卖数            
                  LIMIT 20
    这样不行么???
      

  3.   

    谢谢fcuandy!
    那个例子和我的这个问题可以说是一模一样的。看不明白那句SQL是因为对SQL查询的过程不了解,把一段SELECT放在WHERE部分是我第一次遇到的。
    楼上朋友的方法,行不通,不明白LIMIT这个命令是什么意思,帮助上面也没有。
      

  4.   

    他应该说的是Mysql或其它数据库里的用法。而我说的是MSSQL。