2016-03-24 3 views
0

load_date 1と2の間のデルタが見つかった場合は、比較を作成し、マーキングフィールドをインジケータで更新する必要があります。ご意見をお聞かせください!異なるロード日のデータの差をマークするための作成

例データ

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

クエリは、私が現在持っているが、これは全ての行にマーキングフィールドを更新します。

;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' 

ありがとうございました!

答えて

0

実際には、load_dateが「load1」の場合、「load2」にすることはできません。 ので、代わりにCTEを有する「除く」句を使用しての、あなたはプレーンなupdateステートメントを使用することができます:あなたは、実際のテーブルを更新したくない、とあなただけのレコードセットをしたい場合は、

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

をしかし、メモリ上で、あなたは以下のようにテーブル変数を使用することができます。

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 

それとも、CTEに固執する場合:

with cte as(
    select [ID_person],[NM_firstname], '10' as marking_field 
    from dbo.person 
    where load_date='load1') 
select * from cte; 
関連する問題