2012-03-29 7 views
0

enter image description hereSQLサーバーSSIS OLEDBの送信先を指定しますか?

OLEDB sourceテーブル

Name,Age,Seq 
Gauraw,30,1 
Gauraw,31,1 
Kiran,28,3 
Kiran,29,3 
kiran,28,3 
Venkatesh,,4 
Venkatesh,28,4 

私が欲しいOLEDB destinationテーブルのような基本的に私はoledb_sourceからoledb_destination にバックアップテーブルを作成していて、私の条件はseq列が繰り返されている場合、私である

Gauraw,31,1 
kiran,28,3 
Venkatesh,28,4 

その最後の行を上記のようにseq列にしたいテーブルKiran,28,3は最後のエントリですseqの値が3です。

この結果は、oledb sourceからoledb destinationにSSISデータフロータスクでどのように達成できますか。

+0

年齢とシーケンスは決して減少しません(ID、タイムスタンプなど)? ROW_NUMBERウィンドウ関数を使用してシーケンス内の最後のレコードを取得できますが、結果セットをORDERする必要があります。 Idやタイムスタンプがなければ、あなたが望む結果を得ることはできません... – jlnorsworthy

+0

いいえ、私はそのような '列'を持っていません。 –

+0

追加できますか? ID列、または挿入時にGETDATE()に設定されたDateTimeは正常に動作します。あなたの要件は、あなたのテーブルに同じレコードの複数を追加することができますが、ある時点では、(各シーケンスから)最新のレコードのみを保持したいと述べているようです。最近追加したレコードを識別する列がない場合は、テーブル内のレコードの順序に依存しています(ヒープ?)。これは絶対に推奨されません。 – jlnorsworthy

答えて

1

選択OLE DBソース

「SQLコマンド」そして今、あなたはあなたの必要な列を移動することができ

with x as (select *,rn=row_number() over (order by name) 
      from source) 

select a.* 
from x a , 
     (select name , max(rn) rn 
     from x 
     group by name) b 
where a.rn = b.rn 

以下のクエリを貼り付ける

チェンジ・データ・アクセスモード

0

SSISは、バッチでデータを挿入するので、あなたは、前のものと何が起こったかに基づいて、1つの行で何が起こるかを決めることができないので、私の提案はあなたのソースクエリでそれを処理することです。 あなたのロジックはわかりませんが、名前でグループ化して最大の年齢とシーケンスを取得するように見えます。

select Name, max(age) as age, max(seq) as seq 
from your_table 
group by Name 
関連する問題