有没有办法让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循环中,因为我找不到合适的条件。
有办法做到这一点吗?
答案 0 :(得分:2)
是的,Common Table Expressions可以递归。
以下是一个示例: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
答案 1 :(得分: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)