当前位置: 首页 > 面试题库 >

N后重新启动T-SQL行号

林修真
2023-03-14
问题内容

在一定数量的行之后,如何重新启动我的Row_Number。

例如

我该怎么转

ID  RowNumber
-------------
100 1
101 2
102 3
125 4
126 5
148 6
149 7
150 8
151 9

进入

ID  RowNumber
-------------
100 1
101 2
102 3
125 4
126 1
148 2
149 3
150 4
151 1

请注意,实际上没有办法根据ID进行分区。

我尝试使用递归CTE并非常接近。

这:

DECLARE @MyTable TABLE (ID INT, RowNumber INT)

INSERT INTO @MyTable (ID,RowNumber)
    SELECT 100,1 UNION ALL
    SELECT 101,2 UNION ALL
    SELECT 102,3 UNION ALL
    SELECT 125,4 UNION ALL
    SELECT 126,5 UNION ALL
    SELECT 148,6 UNION ALL
    SELECT 149,7 UNION ALL
    SELECT 150,8 UNION ALL
    SELECT 151,9;

WITH CTE AS 
(
    SELECT  ID,
            RowNumber ,
            1 AS Steps
    FROM @MyTable   
    WHERE ID = 100

    UNION ALL
    SELECT M.ID ,
           M.RowNumber +1,
           CASE WHEN C.Steps = 4 THEN 0 ELSE C.Steps END +1 AS steps
    FROM @MyTable M
        INNER JOIN CTE C ON C.RowNumber = M.RowNumber

)
SELECT * 
FROM CTE

返回值:

ID  RowNumber
-------------
100 1   1
100 2   2
101 3   3
102 4   4
125 5   1
126 6   2
148 7   3
149 8   4
150 9   1
151 10  2

与第一个ID距离很近。

任何帮助将是巨大的。

谢谢,

将要


问题答案:

使用模运算符:

select id, rownumber, 1 + ((rownumber - 1) % 4)
from table t;

如果rownumber不是列,则还可以使用以下row_number()功能:

select id, row_number() over (order by id),
       1 + ((row_number() over (order by id) - 1) % 4)
from table t;


 类似资料:
  • 定期任务配置: 在Logcat中,我得到以下内容: 附加所有相关细节: 编辑一:经过几天的分析,我想出了以下几点: 这是特定于设备的问题。例如,在nexus设备上不会发生。 这是一个更大问题的一部分。显示此行为的设备在使用、和时也不能正常工作。 一个解决方案是此解决方案。但是,这个解决方案至少存在2个问题。(1)当您终止应用程序时,权限将被重置。这意味着每次你打开应用程序后,手动权限是给予。(2)

  • 我在AWS中有一个简单的t2实例,我必须更改RDS DB实例运行的默认时区;由于没有反映任何更改,我决定重新启动RDS实例。 一旦发生这种情况,运行我的的EC2实例开始失败,应用程序返回一个错误,试图连接到数据库。 我还决定重新启动EC2实例(我是AWS的新手)。 在此之后,我无法访问我的webapp,所以我继续通过SSH和连接到EC2实例。 几分钟后,我注意到webapp无法工作,并在一个空白页

  • 问题内容: 我想在日期基础上更新一行。问题是,由于我的错误,我有两行相同的数据。如何仅在一行上运行更新? 问题答案: 表通常具有唯一的ID。您应该对此进行过滤。 例如, 如果您的表没有唯一的ID,请考虑添加一个:带有和的列。

  • 问题内容: 我的日食没有启动,因为我的计算机有点死机了,所以我不得不强制重新启动它。当我不得不重新启动时,Eclipse是打开的,我相信这很可能是原因。我不知道该如何解决。每当我尝试打开它时,它都会告诉我检查工作区中的.log文件,并显示: http://paste.strictfp.com/26579 而且我不知道如何解决它。请帮忙? 问题答案: 您缺少 第125行的 类,您必须重新安装才能解决

  • 我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。 inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。 两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\R

  • 我希望容器在计算机重新启动后自动启动,所以我使用'--restart=always'标志,但它并没有像我预期的那样运行。当我重新启动系统时,容器没有启动。 docker日志信息 添加docker ps-a message,$docker ps-a CONTAINER ID IMAGE命令CREATED STATUS PORTS NAMES a1f4d5471b0a mysql:8.0“docker