1

说我有一张桌子

StoreID   TotalSales   Month  Year
  --      ----------   -----  ----
  1         10           1    2012
  2         2            1    2012
  3         15           1    2012
  1         4            2    2012
  2         5            2    2012

我需要:对于每个唯一的“月/年”,获取销售额最高的前两个 StoreID。

我不知道如何做到这一点。我试过了,cross apply但这似乎不起作用。这完全超出了我的想象,所以希望有人可以在正确的方向上给我一个轻推。

4

1 回答 1

2

此查询使用Common Table ExpressionandWindow Function来获取行中的所有列。它适用于SQL Server 2005 and up

WITH records
AS
(
    SELECT  StoreID, TotalSales , Month, Year,
            DENSE_RANK() OVER (PARTITION BY Month, Year
                                ORDER BY TotalSales DESC) rn
    FROM    tableName
)
SELECT  StoreID, TotalSales , Month, Year
FROM    records
WHERE   rn <= 2
于 2013-03-07T04:59:58.850 回答