0

列を持つこのテーブルの従業員があります

name | salary
-------------
A    | 5000
B    | 2000
c    | 1000 

別のテーブルは列で動作します

name| work
---------
A   | w1
A   | w2
A   | w3
B   | w4
B   | w5

仕事ごとに従業員の給与を 100 増やし、仕事の数が 1 より大きい場合にのみ更新したいと考えています。これにはSQL更新クエリが必要です(ストアドプロシージャ、トリガー、カーソルはありません)。

4

2 に答える 2

1

ここに適切なクエリがあります

update employee as a set salary = salary + 100 * NVL((
    SELECT count(*)
    FROM works as b
    where b.name=a.name
    group by name
    having count(*)>1), 0)
于 2013-10-15T03:55:38.457 に答える
1

マージステートメントを使用してみてください:

MERGE
INTO    employee
USING   (
        select distinct "name", count(*) over (partition by "name") cnt from works
        )x
ON      (employee."name" = x."name")
WHEN MATCHED THEN
UPDATE
SET     salary = salary+(100*case when cnt=1 then 0 else cnt end);
于 2013-10-15T04:14:22.487 に答える