2013-05-21 184 views
0

有沒有辦法讓一個SELECT語句重複自己?
藉此查詢:像foreach循環重複選擇語句

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 
+0

不錯,我會嘗試這一個謝謝 – phadaphunk

+0

這段代碼是拋出錯誤。 – AnandPhadke

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)