问候大家。我有一个 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
. . .
. . .
. . .
我需要找到 12 个月内每月销售额排名前 10 的商家。
如果只有一个月,那是很容易的。
SELECT TOP 10
Merchant,
Sales,
Month
FROM tbl_Merchant
WHERE Month = 1
ORDER BY Sales DESC
但如果我想在 12 个月内找到它们,我就会陷入困境。我需要显示120个商户,这是每个月销量排名前10的商户。目前我的解决方案是将第 1 个月到第 12 个月的 12 个表合并在一起,但我认为这不是一个好方法。
有人可以给我任何建议吗?
非常感谢。
适用于 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
OR
如果您需要每月前 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)