簡體   English   中英

SQL Server中根據指定的數字動態獲取行號間隔

[英]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_NUMBERID減 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM