私は非常に簡単なSQLタスクを手にしており、私が思いついた解決策の検証(またはガイダンス)をしたいと思います。助けてくれてありがとう!SQL - 一致するレコード間でデータを複製する
私は(SSISを使用して)ステージング表にフラット・ファイルからユーザー情報をインポートしています:
は、ここで私が直面してる問題(簡体字)です(これは私の最初の投稿です)。各ユーザーには2つまたは3つのレコードがあります。各行には重要なデータが含まれます。
PK | Name | UniqueCustID | Info1 | Info2 | Info3 |
----------------------
1 | John Doe | 12345 | Opt1 | NULL | NULL
2 | John Doe | 12345 | NULL | Opt2 | NULL
3 | John Doe | 12345 | NULL | NULL | Opt3
最終結果のニーズは、このようなものになること:
PK | Name | UniqueCustID | Info1 | Info2 | Info3 |
----------------------
1 | John Doe | 12345 | Opt1 | Opt2 | Opt3
最終的な結果は、データの一例です。ここ全て3
からの情報が含まれている顧客ごとに1つのレコードをする必要があります
私はこれをできるだけシンプルに保つようにしています。私はSSIS(またはカップル)の基本的なExecute SQLタスクでこれを処理したいと思います。人々の飛び降り反応とは何ですか?追加情報を提供することはできますか?ありがとうございました。
UPDATE - 私がしようとしている2つの段階のプロセス表示するには:
1)この個々の顧客セットマッチのすべてを行う必要があります
WITH CustInfoTMP (UniqueCustID,Info1,Info2,Info3)
AS
(
SELECT UniqueCustID,MAX(Info1),MAX(Info2),MAX(Info3)
FROM CustStaging
GROUP BY UniqueCustID
)
UPDATE CustStaging
SET
CustStaging.Info1 = CustInfoTMP.Info1
CustStaging.Info2 = CustInfoTMP.Info2
CustStaging.Info3 = CustInfoTMP.Info3
FROM CustStaging
INNER JOIN CustStagingTMP ON CustStaging.UniqueCustID = CustStagingTMP.UniqueCustID
2)私は、これを使用して重複したレコードを削除するには:
DELETE
FROM CustStaging
WHERE UniqueCustID NOT IN
(
SELECT MAX(PK)
FROM CustStaging
GROUP BY UniqueCustID
)
私は誰もがこれを守っています。私は本当にフィードバックに感謝します。
行2は、 'Info1'列に' Opt4'を持っている場合、あなたが何をしたいですか? –
@AaronBertrand - それは私が考えなかった素晴らしい質問です。今のところ、Info1/info2/info3列の情報は常に同じ顧客のものとみなすことができます。 – JohnnyMatthys
それは答えですか?私は私が従うかどうか分からない。 –