回答

收藏

SQL每个月的十大销售

技术问答 技术问答 213 人阅读 | 0 人回复 | 2023-09-13

问候大家。我有一个SQL 2008 Express数据库,名称为tbl_Merchant,如下所示:* V& u) ~; a' G5 m
Merchant | Sales | Month
! c% d  d0 v6 i( H* p; HComp.1      100     1' u4 l% E" z0 J; ?
Comp.2      230     1
' B' C# k1 u' n# V" \Comp.3      120     1+ |5 i& ?8 u, N" k- w
Comp.1      200     2- R+ r$ k2 j3 K, ~
Comp.2      130     2
5 P3 J1 J5 ]( \7 J+ z) A1 MComp.3      240     2
" h1 u, m" u% H+ O1 \Comp.1      250     32 X: g; H' `) I* c0 c0 j
  .          .      .
6 p9 ?7 ]6 y; }5 b  n$ {7 Q6 y  .          .      .6 i/ D3 W# {- r, h/ a: Y  T; G
  .          .      .' \6 \: x, l: {+ I6 q% w6 v5 `& u1 E
我需要找到在过去12个月内每月销售量排名前10位的商家。
! p1 G; ?7 l% Z5 z  C如果只有一个月,这是非常容易的。
4 K' f7 Q# S& j! c$ GSELECT TOP 10
& s  P- i& u. l9 n4 r* X! H& P       Merchant, * h1 l7 r7 g9 Q9 x5 P
       Sales,
1 T* D. Z9 i3 {8 e       Month& K4 @1 {# J2 c
FROM   tbl_Merchant
7 T$ n& O' f# e% z0 Y3 Y1 Y9 BWHERE  Month = 1: h1 u( ?) }) P6 l* j4 ^
ORDER BY Sales DESC
* z0 v" I6 u$ ^' B但是,如果我想在12个月内找到它们,我就会陷入困境。我需要显示120个商人,这是每个月的前10名销售商人。目前,我的解决方案是将第1个月到第12个月的12个表合并在一起,但是我认为这不是一个好方法。* a* \0 j6 V' o
有人可以给我任何建议吗?
2 F5 P7 l$ G+ z% V非常感谢你。
8 _# S4 f" Y% r' }1 {- N               
+ e2 B- {3 E( Q# ]1 j4 S& x: y解决方案:
  c$ o3 w* N5 }# n4 X! i2 ?0 }/ \               
% q+ `! Y4 U: |
6 R* m! J7 O* e: N
3 [) x/ Y; G* T4 S4 J7 ?4 t                对Sql Server 2005+有效
1 I3 K& W' r$ B3 z整体尝试一下:5 S+ [1 h$ W& B+ R( s; q" s; w9 f
SELECT TOP 10
$ M) o3 r  _8 w; K" {4 j6 A) S       Merchant, 3 \3 p1 d" Q7 ~0 r- |2 J+ D
       SUM(Sales) Sales0 O) N8 W1 z5 j) y9 }
FROM   tbl_Merchant
0 Q7 a# D$ @, U3 MWHERE  Month BETWEEN 1 and 12
2 `" K& C- h) M. k" pGROUP BY Merchant) W- M( _# |) `% T5 T7 ^3 g
ORDER BY 2 DESC1 ]. J- S# g' X( U
或者
% u3 n9 H, r. p0 A; M* y6 S) Q如果你需要每月细节前10 月产量6 z7 T  Y1 }3 e) _, U" L6 T; T
;WITH MonthsCTE(m) as5 p% c7 e, B: H* W2 {7 E
(, u# e  B1 ], P  n6 A
    SELECT 1 m
9 m2 ]9 {- H! J! H9 N& @    UNION ALL 4 d# Y" L. W! K5 b- h$ Q% O$ Z( T
    SELECT m+1
; h' l; Y+ M/ e6 }$ Z+ \    FROM MonthsCTE
/ J( h/ a# y0 o    WHERE m < 12
8 F7 n2 F$ A) f0 t; C. k9 H* E)7 q% B# t  ^. a9 ]2 {. B
SELECT m [Month], t.*3 L: a$ K8 n+ r( M: ]1 U9 U
FROM MonthsCTE& O( i2 x% f2 @5 s
CROSS APPLY + Y# p2 H: t7 t8 w  f2 k
(
: _/ A% M, I7 \- c    SELECT TOP 10
0 H* d' `- W3 o2 t. ^# v( J' z5 Q       Merchant,
+ ?5 C- C/ W. ]% [: \       SUM(Sales) Sales
0 k0 I* ?$ [( |# c2 e. O& w    FROM   tbl_Merchant
* H6 s: A# n1 Y% Z7 _/ v    WHERE  Month = MonthsCTE.m
! q0 V% F5 F! p! u. \+ a2 d    GROUP BY Merchant
7 ]/ y; V1 |+ b# `- m( X0 O+ w/ ]9 Z    ORDER BY 2 DESC! H; z* i5 ?4 w+ d* {% P" U
) t
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则