いくつかのデータを含むこのテーブルを取得しました:
SELECT Id, SubId, N1, N2, N3 FROM table1 WHERE Id = 2
Id SubId N1 N2 N3
----------- -------- ----------- ----------- ----------------------
2 1 94917 97030 0
2 2 35087 41306 0
2 3 189671 194224 0
2 4 44905 46218 0
2 5 65760 70959 0
2 6 620 2395 0
2 7 60336 69531 0
2 8 65517 70666 0
このクエリを実行します
UPDATE table1
SET N3 = CASE WHEN N1 = 0 THEN 0 ELSE (( N2 * 1.0 / N1 ) -1) * 100 END
Id SubId N1 N2 N3
----------- -------- ----------- ----------- ----------------------
2 1 94917 97030 2.2261554832
2 2 35087 41306 17.7245133525
2 3 189671 194224 2.4004723969
2 4 44905 46218 2.9239505622
2 5 65760 70959 7.9060218978
2 6 620 2395 286.2903225806
2 7 60336 69531 15.2396579156
2 8 65517 70666 7.8590289543
したがって、ID でテーブルをグループ化すると、次のデータが得られます。
SELECT Id,
SUM(N1) AS N1,
SUM(N2) AS N2,
CAST(0 AS NUMERIC(10,2)) AS N3
INTO table2
FROM table1
GROUP BY Id
UPDATE table2
SET N3 = CASE WHEN N1 = 0 THEN 0 ELSE (( N2 * 1.0 / N1 ) -1) * 100 END
SELECT Id, N1, N2, N3 FROM table2 WHERE Id = 2
Id N1 N2 N3
----------- ----------- ----------- ----------------------
2 556813 592329 6.38
問題は、フィールドを再計算せずに ID (6.38) でグループ化したときに、同じ値の N3 を取得する方法です (2 回目の更新)。逆の計算 ((N3/100) + 1) を適用して N3 を合計しようとしましたフィールドが機能しませんでした。