0

ID、Name、UserValue、AverageValue という名前の列を持つ Test という名前のテーブルが 1 つあります。

ID,Name,UserValue,AverageValue (表のとおり)
1,a,10,NULL
2,a,20,NULL
3,b,5,NULL
4,b,10,NULL
5,c,25,NULL

(SELECT Name, AVG(UserValue) FROM Test GROUP BY Name) Giving meを介して数値を平均化する方法を知っています。

Name,Column1(AVG(Query)) (Web サイトを実行すると、データバインドを介して GridView1 に表示されるように)
a,15
b,7.5
c,25

私がする必要があるのは、計算された AVG() をサーバー側の AverageValue 列に挿入して、テーブルをそのように表示することです。

ID,Name,UserValue,AverageValue (表のとおり)
1,a,10,15
2,a,20,15
3,b,5,7.5
4,b,10,7.5
5,c,25,25

条件:
AVG(UserValue) を Test テーブル AverageValue に挿入する必要があります。
新しいエントリが作成されると、AverageValue は AVG(UserValue) に一致するように更新されます。

私が探しているのは、次のような SQL コマンドです。
INSERT INTO Test (AverageValue) VALUES (SELECT Name, AVG(UserValue) FROM Test GROUP BY Name)

例を見つけるためにグーグルで検索するのにかなりの時間を費やしましたが、そのような運はありませんでした。どんな例でも大歓迎です。よろしくお願いします。

4

2 に答える 2

0

これを試して:

with toupdate as (
      select t.*, avg(uservalue) over (partition by name) as newavg
      from test t
     )
update toupdate
    set AverageValue = newavg;

CTEtoupdateは更新可能な CTE であるため、テーブルのように update ステートメントで使用できます。

于 2013-08-14T18:33:29.890 に答える