2016-04-11 18 views
0

İki çalışanın verilerini güncellemeye çalışıyorum. Bir çalışanın kimliğinin 1234 ve diğer çalışanın kimliğinin 5678 olduğunu varsayalım. Her çalışanın farklı hizmetleri vardır.SQL İki kaydı güncelleştiriliyor

Bu Yukarıdaki tabloda referans

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 

benim masa, biz 10 kayıtlarla 2 çalışanı var ve her çalışanın 5 hizmetleri vardır. Şu anda yapmak istediğim şey, bu iki çalışanın hizmetlerini bir çalışan (1234) olarak birleştirmektir çünkü çalışan 5678 kovulmuştur. Bununla birlikte, '5' veya '37' olan serv_id'in çalışan 1234'te güncellenmesine gerek yoktur.

İşte beklenen sonucum. A'nın aktif olduğunu ve inaktif olduğumu söyleyeyim. Nasıl yapıldığına dair herhangi bir öneriniz var mı?

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

Bu tablodaki veriler bozuk, serv_id, 5 ve 37 gibi yinelenen değerler içeren birincil anahtar olamaz. Bize doğru bir tablo yapısı sağladınız mı? – JassyJov

+0

üzgünüm peki, serv_id pk değil, sadece bir sütun. Sorumu çözdüm. – RedRocket

cevap

0

deneyin bu

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 
Biz emp_id için aynı değerlere sahip ancak kayıtlarını güncellemek ardından ortak serv_name s bulup için serv_name ve emp_id tarafından kendisine tabloyu katılabilir

= 1234

+0

Yanıtınız için teşekkür ederim, visual studio 2010 kullanıyorum. Ancak, "SOL" – RedRocket

+0

UPDATE tarihinde yanlış bir sözdizimi düzeltildi – StanislavL