![](/img/trans.png)
[英]How to get specified number of prior rows from a specified row in SQL Server 2014?
[英]Dynamically get row number interval based on specified number in SQL Server
我有以下數據,並希望在 SQL Server 中按給定數字對數據進行分組:
CREATE TABLE #TBL (ID INT)
INSERT INTO #TBL
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9),
(10), (11), (12), (13), (14), (15), (16), (17), (18), (19), (20);
如果我將變量設置為 n 值,則新列應從 1 開始,並包括變量
我試過這個,但我無法讓它工作
DECLARE @N INT = 5
SELECT
ID
,ROW_NUMBER() OVER(ORDER BY ID) AS RN
,CASE WHEN ROW_NUMBER() OVER(ORDER BY ID) > @N THEN ROW_NUMBER() OVER(ORDER BY ID)-@N
ELSE ROW_NUMBER() OVER(ORDER BY ID) END AS New
FROM
#TBL
電流輸出
ID RN New
---------------
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 1
7 7 2
8 8 3
9 9 4
10 10 5
11 11 6
12 12 7
13 13 8
14 14 9
15 15 10
16 16 11
17 17 12
18 18 13
19 19 14
20 20 15
期望的輸出:
我想你想使用ROW_NUMBER
與ID
減 1 的分區,除以 5:
DECLARE @N INT = 5;
SELECT
ID,
ROW_NUMBER() OVER (ORDER BY ID) RN,
ROW_NUMBER() OVER (PARTITION BY (ID-1) / @N ORDER BY ID) NEW
FROM #TBL;
這是查詢,使用模數運算符,需要 -1 來使ROW_NUMBER
從零開始:
CREATE TABLE #TBL (ID INT);
INSERT INTO #TBL VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),
(12),(13),(14),(15),(16),(17),(18),(19),(20);
DECLARE @N INT=5
SELECT
ID,
ROW_NUMBER() OVER (ORDER BY ID) RN,
((ROW_NUMBER() OVER (ORDER BY ID) -1) % @N) +1 NEW
FROM #TBL;
DECLARE @N INT=8
SELECT ID, ROW_NUMBER() OVER(ORDER BY ID) AS RN,
CAST(ROW_NUMBER() OVER(ORDER BY ID) AS DECIMAL) % @N + 1 AS New
FROM #TBL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.