SQL选择数字 - 动态地在每行中增加值

时间:2017-11-27 17:54:16

标签: sql-server select auto-increment numeric

有没有办法编写一个动态的sql select语句(不查询表/列),它将返回类似这样的内容

id
1
2
3
4
5
... 
etc. 

我需要编写几个通用查询来拉取值1到X
(X将由先前的不同查询预先确定)。

假设X为5,数据将返回5行1 2 3 4 5
如果X为27,则数据将返回1 2 3 ... 27,依此类推。

关于其他评论,这是在第三方sybase软件中使用的,我仅限于它似乎创建的查询的复杂性,并且删除表似乎不起作用

3 个答案:

答案 0 :(得分:0)

你可以试试像这样的递归CTE

declare @mx integer=4

;with test as (
select 1 as id
union all
select id+1
from test
where id<@mx
)
select * from test

答案 1 :(得分:0)

27选择:

DECLARE @Count int = 1
DECLARE @MaxCount int = 27 -- Whatever your incoming max is

WHILE @Count <= @MaxCount
BEGIN
SELECT @Count

SELECT @Count = @Count + 1
END

一个选择:

CREATE TABLE #TEMPNUMS (AUTONUM INT IDENTITY (1,1), GHOSTVAL VARCHAR(1))


DECLARE @Count int = 1
DECLARE @MaxCount int = 27 -- Whatever your incoming max is

WHILE @Count <= @MaxCount
BEGIN
INSERT INTO #TEMPNUMS (GHOSTVAL)
SELECT ''

SELECT @Count = @Count + 1
END

SELECT AUTONUM FROM #TEMPNUMS

DROP TABLE #TEMPNUMS

答案 2 :(得分:0)

假设您的最大数量不会超过9999.如果是,那么您需要重新构建查询以添加另一个图层。

DECLARE @MaxCount int = 27 -- Whatever your incoming max is

SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
     (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
     where ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n between 1 and @MaxCount
ORDER BY 1

在另一个类似问题上查看此答案:How to generate a range of numbers between two numbers?