2

いくつかのデータを含むこのテーブルを取得しました:

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 を合計しようとしましたフィールドが機能しませんでした。

4

2 に答える 2

2

N1N2SUM(N1)と にSUM(N2)それぞれ置き換えるだけです。

SELECT  Id, 
        SUM(N1) AS N1, 
        SUM(N2) AS N2, 
        N3 = CAST(CASE WHEN SUM(N1) = 0 THEN 0 ELSE (( SUM(N2) * 1.0 / SUM(N1) ) -1) * 100 END AS NUMERIC(10,2))
FROM table1
GROUP BY Id

http://sqlfiddle.com/#!3/de849/4/0のデモ

于 2012-12-26T18:05:37.987 に答える
1
SELECT  Id,
        SUM(N1) AS N1,
        SUM(N2) AS N2,
        CAST(CASE WHEN SUM(N1) = 0 THEN 0 ELSE (( SUM(N2) * 1.0 / SUM(N1) ) -1) * 100 END AS NUMERIC(10,2))) as N3
FROM temp
GROUP BY Id

N3 は、個々の値ではなく集計に基づいて N3 を計算しているため、N1 と N2 の代わりに Sum(N1) と Sum(N2) を値として持つ必要があります。

于 2012-12-26T18:11:24.257 に答える