0

有没有办法让 SELECT 语句重复自己?
接受这个查询:

DECLARE @one INT = 1
SELECT @one + @one AS [MATH]

输出将是

 ------
| MATH |
 ------
|  2   |
 ------

我想要做的是为每个不同的数字重复这个 SELECT 语句,就像这样

 -- PSEUDO CODE

 DECLARE @Numbers NVARCHAR(MAX) = '1,2,3,4'
 FOR EACH INT @number IN @Numbers 
 BEGIN 

   SELECT @number + @number AS [MATH]

 END

输出将是:

 ------     
| MATH | 
 ------
|  2   |
 ------  
 ------     
| MATH | 
 ------
|  4   |
 ------  
 ------     
| MATH | 
 ------
|  6   |
 ------ 
 ------
| MATH | 
 ------
|  8   |
 ------

我知道当时它们不是 INT,但我有一个在“,”上拆分的函数,然后将 varchar 转换为数字。

我不知道如何将其放入 WHILE 循环中,因为我找不到合适的条件。

有没有办法做到这一点 ?

4

2 回答 2

2

是的,公用表表达式可以递归。

这是一个例子:http: //blog.sqlauthority.com/2008/07/28/sql-server-simple-example-of-recursive-cte/

或者你可以使用一个while循环,从你的字符串中弹出数字。

 declare @sum = 0
 while len(@string) > 0
 begin
      select @sum + convert(int, substring(1,charindex(',',@string),@string)))
      select 'Math: '+ltrim(str(@sum))
      select @string = substring(charindex(',',@string),len(@string),@string)
 end
于 2013-05-21T20:35:39.460 回答
2

尝试这个:

DECLARE @Numbers NVARCHAR(MAX) = '1,2,3,4'
DECLARE @num int=0
WHILE CHARINDEX(',',@Numbers) > 0
BEGIN 
SET @num=convert(int,LEFT(@Numbers,1))
SET @Numbers=STUFF(REPLACE(@Numbers,LEFT(@Numbers,1),''),1,1,'')
SELECT @num + @num AS [MATH]
END
select convert(int,@Numbers)+convert(int,@Numbers)
于 2013-05-22T05:00:50.387 回答