2016-03-24 23 views
0

Yük_tarihi 1 ile 2 arasında bir delta bulunduğunda bir gösterge ile işaretleme alanını bir karşılaştırma ve güncelleyin. Lütfen tavsiye!Farklı yükleme tarihlerindeki veriler arasındaki farkı işaretlemek için cte oluşturun

örnek veri

ID_person, NM_firstname, load_date, marking_field 
120, Appleton, 1 
120, Apple, 2 
120, George, 1 
120, George, 2 

Şu anda var Sorgu, ancak tüm satırlarda işaretleme alanı güncellenir bu bir.

;with cte as (
    select [ID_person],[NM_firstname] from dbo.person where load_date='load1' 
    except 
    select [ID_person],[NM_firstname] from dbo.person where load_date='load2' 
) 
update cte 

set Marking_Field='10' 

Tavsiyeniz için teşekkürler!

cevap

0

Aslında, load_date öğesindeki bir kişi "load1" ise, "load2" olamaz. Yani, yerine bir CTE ile maddesi "dışında", bir düz güncelleme deyimi kullanabilirsiniz kullanmanın : Eğer gerçek tabloyu güncellemek istemiyorsanız,

update dbo.person 
set Marking_Field = '10' 
where load_date = 'load1' 

Ama ve sadece bir kayıt istiyorum

with cte as(
    select [ID_person],[NM_firstname], '10' as marking_field 
    from dbo.person 
    where load_date='load1') 
select * from cte; 
: Eğer CTE ile sopa istiyorsanız

declare @a table(id int, firestname varchar(50), marking_field varchar(5)); 
select [ID_person],[NM_firstname], '10' 
into @a 
where load_date = 'load1'; 
select * from @a 

Veya: belleğe, aşağıdaki gibi bir tablo değişkeni kullanabilirsiniz