在SQL脚本中考虑一个while循环

时间:2010-05-18 18:36:23

标签: sql refactoring

假设我有一个带有列的表amountInfo(id,amount1,amount2,amount3) 其中amountX是货币值,而id是一个int值,范围从1到10以下的某个int。

目前我有一些代码可以做到这一点:

declare @id int, @idmax int, @amounttotal money
select @idmax = (select max(Id) from amountInfo)
while (@id <= @idmax)
begin
    select @amounttotal = sum(amount1 + amount2 + amount3) 
                          from amountinfo where id=@id
    -- do something with @amounttotal
    select @id=@id+1
end

有没有办法在这里用某种复杂的select语句分解while循环?我对C / C ++ / C#编程很有经验,但SQL对我来说有点新鲜。谢谢!

编辑:基本上“--do something”部分涉及将单个@amounttotals插入另一个表。我正在运行的实际查询比这更复杂,但我希望在发布一个巨大的代码示例之前先解决这个简单的问题。

2 个答案:

答案 0 :(得分:5)

尝试这样的事情:

INSERT INTO OtherTable
        (id, col1, col2, ...)
    SELECT 
        dt.id, t.col1, dt.TotalSum
        FROM (SELECT
                  id, SUM(t.amount1 + t.amount2 + t.amount3) AS TotalSum
                  FROM AMOUNTINFO
                  GROUP BY id
                  WHERE id>=@id AND id<=@idmax
             ) dt
            INNER JOIN  AMOUNTINFO t ON dt.id=t.id

答案 1 :(得分:1)

您不需要WHILE循环,请使用:

SELECT @amounttotal = SUM(t.amount1 + t.amount2 + t.amount3)
  FROM AMOUNTINFO t
 WHERE t.id BETWEEN @id AND @idmax

...但你需要在WHILE循环中描述你正在做的@amounttotal变量,以便我们进一步帮助你。