2013-03-01 35 views
0

我有一個下面的表在哪裏我通過記錄需要循環,並添加值的變量使用While循環來計算表中的值?

Declare @Variable1 INT 
SET @Variable1=0 

Declare @totalval INT 
SET @totalval=0 

While (@Variable1<=20) 
BEGIN 
SET @[email protected]+(Select Salary from EmpTable Where EmpID=9) 
PRINT @totalval 
SET @Variable1= Variable1+1 
END 
GO 

我不能打印的價值...我使用SQL Server 2005的

謝謝大家

+5

你爲什麼要循環可言,你不能用'SUM()'? – SQLMenace 2013-03-01 11:38:19

+0

NO我不能使用SUM..its一個要求 – Rohit 2013-03-01 11:40:30

+0

SET語句似乎存在錯誤。您在'while look'內忽略了'variable1'的'@' – praveen 2013-03-01 11:40:49

回答

1

這也是工作(你的要求):

Fiddle demo here

declare @total int, @records int = 20 

select top(@records) @total=isnull(@total,0) + salary 
from EmpTable 
where empid = 9 
-- order by salary (you may need to order by something) 
+0

這工作對我來說謝謝@Kaf – Rohit 2013-03-01 12:42:53

+0

@凱爾:沒問題! – Kaf 2013-03-01 12:44:41

1

的問題是這一行:

SET @Variable1= Variable1+1 

不起作用,它改成這樣:

SET @Variable1= @Variable1+1 

,如果你要離開它,你應該得到這個錯誤:

Msg 207, Level 16, State 1, Line 11 
Invalid column name 'Variable1'. 
+0

是的,我收到錯誤 – Rohit 2013-03-01 11:42:53

+0

@凱爾,好吧。所以把它改成我給你的第二行,打印就可以工作。下一次,請***包括您遇到的任何錯誤。這個問題只是說'我不能打印價值'。這導致人們相信當沒有時,「PRINT」語句有錯誤。 – 2013-03-01 11:44:16

2

你可以用這個代替:

;WITH a AS 
(
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) num 
      , * 
    FROM EmpTable 
    WHERE EmpID = 9 

) 

SELECT @totalval = SUM(Salary) 
     , @Variable1 = COUNT(*) 
FROM a 
WHERE num <= 20 

這將是這樣做的常用方法之一這樣的任務,它比循環更有效率。 ROW_NUMBER() OVER (ORDER BY (SELECT 0))向記錄提供序數,但不改變排序。