SQL 每月销售额前 10 名

Dra*_*lda 3 sql statistics

问候大家。我有一个 SQL 2008 express 数据库,名称为 tbl_Merchant,类似如下:

Merchant | Sales | Month
Comp.1      100     1
Comp.2      230     1
Comp.3      120     1
Comp.1      200     2
Comp.2      130     2
Comp.3      240     2
Comp.1      250     3
  .          .      .
  .          .      .
  .          .      .
Run Code Online (Sandbox Code Playgroud)

我需要找到 12 个月内每个月销售额排名前 10 的商家。

如果只有1个月,这很容易。

SELECT TOP 10 
       Merchant, 
       Sales, 
       Month
FROM   tbl_Merchant
WHERE  Month = 1
ORDER BY Sales DESC
Run Code Online (Sandbox Code Playgroud)

但是如果我想在 12 个月内找到它们,我就会陷入困境。我需要显示 120 个商家,它们是每个月的前 10 个销售商家。目前我的解决方案是将第 1 个月到第 12 个月的 12 个表合并在一起,但我认为这不是一个好方法。

任何人都可以给我任何建议吗?

非常感谢。

Ole*_*Dok 6

适用于 Sql Server 2005+

整体试试这个:

SELECT TOP 10 
       Merchant, 
       SUM(Sales) Sales
FROM   tbl_Merchant
WHERE  Month BETWEEN 1 and 12
GROUP BY Merchant
ORDER BY 2 DESC
Run Code Online (Sandbox Code Playgroud)

或者

如果你需要每月细节前10月产量

;WITH MonthsCTE(m) as
(
    SELECT 1 m
    UNION ALL 
    SELECT m+1
    FROM MonthsCTE
    WHERE m < 12
)
SELECT m [Month], t.*
FROM MonthsCTE
CROSS APPLY 
(
    SELECT TOP 10
       Merchant, 
       SUM(Sales) Sales
    FROM   tbl_Merchant
    WHERE  Month = MonthsCTE.m
    GROUP BY Merchant
    ORDER BY 2 DESC
) t
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试:

select * from
(SELECT Merchant, 
        Sales, 
        Month,
        row_number () over (partition by Month order by Sales desc) rn
 FROM   tbl_Merchant
 WHERE  Month between 1 and 12) v
where rn <= 10
order by Month, Sales desc
Run Code Online (Sandbox Code Playgroud)

(应该在 SQLServer 中工作;不确定 Sybase。)