假设我有一个带有列的表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插入另一个表。我正在运行的实际查询比这更复杂,但我希望在发布一个巨大的代码示例之前先解决这个简单的问题。
答案 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
变量,以便我们进一步帮助你。