0

レコードをループして変数に値を追加する必要がある次のテーブルがあります

Declare @Variable1 INT
SET @Variable1=0

Declare @totalval INT
SET @totalval=0

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

値を出力できません...SQLServer2005を使用しています

皆さん、ありがとうございました

4

3 に答える 3

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

これは、そのようなタスクを実行する通常の方法の1つであり、ループするよりも効率的です。ROW_NUMBER() OVER (ORDER BY (SELECT 0))レコードに序数を与えますが、ソートは変更しません。

于 2013-03-01T11:43:51.777 に答える
1

問題はこの行です:

SET @Variable1= Variable1+1

それは機能しません、これに変更してください:

SET @Variable1= @Variable1+1

そのままにしておくと、次のエラーが発生するはずです。

Msg 207, Level 16, State 1, Line 11
Invalid column name 'Variable1'.
于 2013-03-01T11:41:15.797 に答える
1

これも機能しています(要件に応じて):

ここでフィドルデモ

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)
于 2013-03-01T11:57:45.520 に答える