2016-04-11 185 views
0

我正在嘗試更新兩位員工的數據。假設一個員工的ID是1234而另一個員工的ID是5678。每個員工都有不同的服務。SQL更新兩條記錄

這是我參考

serv_id   emp_id  serv_name status 
1     1234  computer1  A 
5     1234  computer2  A 
10    1234  computer3  A 
37    1234  computer4  A 
5     5678  computer2  A 
11    5678  projector1 A 
12    5678  projector2 A 
30    5678  projector3 A 
37    5678  computer4  A 
35    5678  projector4 A 

在上面的表的表,我們有2名員工與10個記錄每個員工有5個服務。我現在想要做的是將這兩名員工的服務合併爲一名員工(1234),因爲員工5678被解僱。但是,'5'或'37'的serv_id不需要在員工1234中更新。

這是我的預期結果。假設A是活躍的,我是無效的。有關如何做的建議?

serv_id (pk)     emp_id (fk)  serv_name status 
1       1234   computer1  A 
5 (no update)    1234   computer2  A 
10       1234   computer3  A 
11       1234   projector1 A 
12       1234   projector2 A 
30       1234   projector3 A 
35       1234   projector4 A 
37 (no update)    1234   computer4  A 
11       5678   projector1 I 
37       5678   computer4  I 
5       5678   computer2  I 
11       5678   projector1 I 
12       5678   projector2 I 
30       5678   projector3 I 
37       5678   computer4  I 
35       5678   projector4 I 
+0

此表中的數據已損壞,serv_id不能是主鍵,且重複值爲5和37.您是否爲我們提供了正確的表結構? – JassyJov

+0

對不起,serv_id不是pk,它只是一列。我已經解決了我的問題。 – RedRocket

回答

0

試試這個

declare @tb as Table (serv_id int, emp_id int, serv_name nvarchar(20),status nvarchar(5)) 
insert into @tb 
select 1 ,1234,'computer1','A' union 
select 5 ,1234,'computer2','A' union 
select 10,1234,'computer3','A' union 
select 37,1234,'computer4','A' union 
select 5 ,5678,'computer2','A' union 
select 11,5678,'projector1','A' union 
select 12,5678,'projector2','A' union 
select 30,5678,'projector3','A' union 
select 37,5678,'computer4','A' union 
select 35,5678,'projector4','A' 

update @tb set status ='I' where emp_id = 5678 

insert into @tb select serv_id,1234,serv_name,'A' from @tb where emp_id=5678 and serv_id not in (select serv_id from @tb where emp_id=1234) 

select * from @tb order by emp_id,serv_id 
0
UPDATE t1 
SET t1.status='I' 
FROM my_table t1 
     LEFT OUTER JOIN my_table t2 ON t2.serv_name=t1.serv_name AND t2.emp_id=1234 
WHERE t1.emp_id=5678 
    AND t2.serv_id IS NULL 

我們可以通過serv_nameemp_id加入表本身找到共同serv_name秒,然後只更新不具有相同的值中的emp_id記錄= 1234

+0

感謝您的回覆,我正在使用visual studio 2010.但是,我在「左」 – RedRocket

+0

附近得到了錯誤的語法,更正了UPDATE – StanislavL