我应该如何使用Union All来获取集合中while循环的结果,以便可以将其用于填充组合框中的数据。
这是我尝试将所有内容合并的sql代码
Declare @start int = 1
While(@start <= 24)
Begin
(select @start as ColumnA) union All ----need to fix this line
set @start = @start + 1
End
预期的输出:
ColumnA
1
2
.
.
.
24(up to 24)
答案 0 :(得分:1)
使用递归的公用表表达式(cte)产生所需的结果:
with cte (n) as
(
values (1) -- anchor
union all
select n + 1 from cte -- recursive
where n < 24 -- terminate
)
select * from cte;
答案 1 :(得分:0)
SQL Server解决方案可能与此类似。上限为100,但是提高上限并不困难
WITH x AS
(
SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n)
)
SELECT 1 + ones.n + 10 * tens.n ColumnA
FROM x ones, x tens
WHERE ones.n + 10 * tens.n < 24
ORDER BY ColumnA
答案 2 :(得分:0)
获得24个连续数字的最简单方法是
SELECT TOP 24 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS ColumnA
FROM master..spt_values --pick any table with a sufficient row-count
作为一个初学者,您应该从一开始就尝试学习基于基于集合的的思想。您的代码显示的是过程性思维。
使用基于设置的工具,您必须学会像工具一样思考。
这意味着:
没有循环,没有游标,没有执行此操作,然后执行此操作,最后执行该操作。。
这意味着:
亲爱的引擎,我为您描述了我想要获得的东西,这取决于您如何最好地解决。
只是为了向您展示可能起作用了(但同样,循环在大多数情况下是错误的方法):
-我声明了一个表变量,其作用类似于真实表,但是当超出范围时消失了:
DECLARE @keepNumbers TABLE(ID INT IDENTITY, Nmbr INT);
-您的循环将一个接一个的插入数字
Declare @start int = 1
While(@start <= 24)
Begin
INSERT INTO @keepNumbers VALUES(@start);
set @start = @start + 1
End
-不,您没有一个包含所有数字的表格
SELECT Nmbr FROM @keepNumbers ORDER BY ID;