1
使用SQL Server 2014:排行:如何將ROW_NUMBER或等級重置爲1
考慮下表:
DECLARE @Table TABLE (
Id int NOT NULL identity(1,1),
Col_Value varchar(2)
)
INSERT INTO @Table (Col_Value)
VALUES ('A'),('A'),('B'),('B'),('B'),('A'),('A'),('B'),('B'),('B'),('A'),('B'),('B'),('A'),('A'),('B'),('C'),('C'),('A'),('A'),('B'),('B'),('C')
我怎樣才能創建像下面的結果產生R列的查詢
+----+------+---+
| ID | Data | R |
+----+------+---+
| 1 | A | 1 |
+----+------+---+
| 2 | A | 2 |
+----+------+---+
| 3 | B | 1 |
+----+------+---+
| 4 | B | 2 |
+----+------+---+
| 5 | B | 3 |
+----+------+---+
| 6 | A | 1 |
+----+------+---+
| 7 | A | 2 |
+----+------+---+
| 8 | B | 1 |
+----+------+---+
| 9 | B | 2 |
+----+------+---+
| 10 | B | 3 |
+----+------+---+
| 11 | A | 1 |
+----+------+---+
| 12 | B | 1 |
+----+------+---+
| 13 | B | 2 |
+----+------+---+
| 14 | A | 1 |
+----+------+---+
| 15 | A | 2 |
+----+------+---+
| 16 | B | 1 |
+----+------+---+
| 17 | C | 1 |
+----+------+---+
| 18 | C | 2 |
+----+------+---+
| 19 | A | 1 |
+----+------+---+
| 20 | A | 2 |
+----+------+---+
| 21 | B | 1 |
+----+------+---+
| 22 | B | 2 |
+----+------+---+
| 23 | C | 1 |
+----+------+---+
在上述結果表中,一旦在一排數據列的變化,R值復位到1
更新1
本圖爾的答案效果很好。
我建議下面的帖子更新時參考這個答案。
T-sql Reset Row number on Field Change
Row_number()over(按ID以數據順序劃分的分區) – dman2306
@ dman2306,而不是來自您的查詢的結果遠離帖子中列出的輸出。 –
@artm,您所指的帖子沒有確認的答案。此外,答案似乎僅限於較早版本的SQL Server。我期望SQL 14在這裏提供一個乾淨的解決方案。 –