2013-10-15 86 views
0

我有列SQL查詢來更新

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

另一個表 作品與列

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

我想100%的工作,以提高員工的工資和更新此表的員工只有數的作品都大於1. 任何人都可以幫我解決這個問題。我需要一個SQL更新查詢(沒有存儲過程或觸發器或遊標)。

回答

1

請嘗試使用MERGE語句:

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); 
+0

謝謝......它的工作。 – user2881088

+0

即使員工有1項工作完成,此查詢也會添加100 –

+0

請檢查編輯後的答案。 – TechDo

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) 
+1

其實我需要100個幹活的意思是一個應該得到300增量和B應該得到200增量等... – user2881088

+0

檢查更新回答 –

+0

非常感謝。它完美的工作正常。 – user2881088