2
UPDATE Houses 
SET    lStatus = U.codesum
FROM   Houses H
JOIN   (SELECT ref, SUM(code) AS codesum
    FROM   Users
    GROUP  BY ref) AS U ON U.ref = H.ref

上記のコードは、すべての家 (Houses テーブル) のすべてのユーザーを取得します。すべてのユーザーのコード列 (Users テーブル) を合計します。最後に、houses テーブルの lstatus 列の結果を更新します。

私の質問は次のとおりです。コード列を合計しないクエリを書き直す必要があります。むしろ、case ステートメントを作成したいと思います。例えば:

tempvar = 0    //local variable might be required

For each user {

If code == 1 then tempvar += 5

else if code == 2 then tempvar += 10

etc

tempvar = 0;
}

各家のすべてのユーザーをループしたら、lStatus = tempvar を設定できます。次に、tempvar を次の家のために 0 にリセットする必要があります。

4

3 に答える 3

0

これを試して :

UPDATE Houses 
SET    lStatus = U.code
FROM   Houses H
JOIN   (
             SELECT ref, SUM(
                                CASE
                                    WHEN Code = 1
                                    THEN 5
                                    WHEN Code = 2
                                    THEN 10
                                    ELSE 0
                                END
                            ) AS code
             FROM   Users
             GROUP  BY ref
       ) AS U ON U.ref = H.ref
于 2013-02-12T05:00:44.613 に答える