需要根据指定间隔的结果集生成数字。

时间:2020-05-12 13:51:46

标签: sql-server

我有以下要求。

输入如下。

Create table Numbers
(
    Num int
)
Insert into Numbers

values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15)

Create table FromTo
(
    FromNum int
    ,ToNum int
)

Select * From FromTo

输出应如下所示。

FromNum ToNum
1       5
6       10
11      15

实际要求如下。

我需要将一列的数据加载到一个表中,该表将具有成千上万个具有不同编号的记录。 考虑如下。

1,2,5,7,9,11,15,34,56,78,98,123,453,765等。

我需要将它们加载到间隔为5000的FROM和TO列的其他表中。例如,在第一个5000中,如果我的数字一直到3000,则我的第一行应将FromNo设置为1,将ToNum设置为3000第二行:如果数据直到10000才有,而下一个no从12312开始(这是FromNum的第二行),则ToNum值应为+5000,即17312。在这里,如果没有no的数据直到17312需要考虑12312和17312之间的ToNum

输出应如下所示。

FromNum ToNum
1       3205
1095806 1100805
1100808 1105806
1105822 1110820

你们能帮我解决上述问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以尝试对数据进行分组并获得预期的结果:

DECLARE @interval int = 5

INSERT INTO FromTo (FromNum, ToNum)
SELECT MIN(Num) AS FromNum, MAX(Num) AS ToNum
FROM Numbers
GROUP BY (Num - 1) / @interval