2016-09-21 7 views
0

このタイトルは最初は少し混乱するかもしれませんが、私の例は私の意図を明確にすることを望みます。SQL Server - 同じIDを「一致する」変数IDに付与する

ID1  ID2 uniqueidentifier 

A14  A21 
A14  A55 
A21  A14 
A21  A55 
A55  A14 
A55  A21 
... 
A123  A22 
A22  A123 
... 

IDの背後には、いくつかの基準に基づいて一致した会社名があります。 基本的に表示されている例は、そのID 'A14'が 'A21'とマッチしていることを意味します。そして、基準に合致する第3の会社名があること。

以下のように名前が時々異なっ書かれているように私には、会社名でグループにそれらをcan't:
- 例カンパニー社は
- 例カンパニー社は

基本的には最初の6行う同じ識別子を持つ他の2人も同様です。 このテーブルをNEWID()で更新したいので、この時点でuniqueidentifierは新しいものになります。

質問は:それは出力

のように私の問題のための任意の提案を見えるように私はuniqueidentifiers(NEWIDを())を割り当てることができますどのように?

これは私が長い間考えていた問題であるため、どんな種類のヘルプでも非常にうれしいです。

編集:私はこの1つはあなたが望む結果を与えるべきだと思う

ID1  ID2 uniqueidentifier 

A14  A21 XXER-WQEE-... 
A14  A55 XXER-WQEE-... 
A21  A14 XXER-WQEE-... 
A21  A55 XXER-WQEE-... 
A55  A14 XXER-WQEE-... 
A55  A21 XXER-WQEE-... 
... 
A123  A22 IOKK-Q23A-... 
A22  A123 IOKK-Q23A-... 
... 

おかげ MG

+1

予想される出力を表示してください – TheGameiswar

+2

そのユニークな識別子はどこから来ますか? –

+0

私はこの時点で 'NEWID()'というテーブルを更新します – mgruber

答えて

1

:予想される出力は次のようになります。申し訳ありませんが、少しばかりです。説明が必要な場合は質問してください。

DECLARE @Table1 TABLE (ID1 varchar(100), ID2 varchar(100), uniqueid uniqueidentifier) 

INSERT @Table1 
    (ID1, ID2, uniqueid) 
VALUES 
    ('1', '2', NULL ), 
    ('2', '1', NULL ), 
    ('2', '3', NULL ), 
    ('3', '2', NULL ), 
    ('1', '3', NULL ), 
    ('3', '1', NULL ), 
    ('4', '5', NULL ), 
    ('5', '4', NULL ) 

DECLARE @tmp VARCHAR(100) 
DECLARE @NewID UNIQUEIDENTIFIER 

DECLARE @ID2 TABLE (ID2 varchar(100)) 

WHILE EXISTS (SELECT 1 FROM @Table1 WHERE uniqueid IS NULL) 
BEGIN 

SET @NewID = NEWID() 

SELECT @tmp = ID1 
FROM @Table1 
WHERE uniqueid IS NULL 

DELETE @ID2 

UPDATE @Table1 
SET uniqueid = @NewID 
OUTPUT Inserted.ID2 
INTO @ID2 
WHERE ID1 = @tmp 

WHILE EXISTS (SELECT 1 FROM @ID2 JOIN @Table1 ON [@Table1].ID1 = [@ID2].ID2 WHERE [@Table1].uniqueid IS NULL) 
BEGIN 

    UPDATE t1 
    SET uniqueid = @NewID 
    OUTPUT Inserted.ID2 
    INTO @ID2 
    FROM @Table1 t1 
    JOIN @ID2 id2 ON t1.ID1 = id2.ID2 

END 


END 

SELECT * FROM @Table1 
+0

これは私が探していたものでした!いいぞ!! – mgruber

+0

こんにちはバレラ!私は最初の質問の変更された要件についてこの質問に別の答えを加えました。あなたが私を助けてくれることを願っています。前もって感謝します! – mgruber

-1

状況が変化し、コードが必要です。
IDの一部にすでに固有識別子が含まれていることがあります。

上記の(@Valera Sorokaによる)コードは、uniqueidentifierがNULLのIDのみを考慮します。つまり、行1-2に既にuniqueidentifierがある場合、この例の3-6行目に新しいuniqueidentifierを付与することになります。このコードでは、一意識別子を持つIDを最初に探す必要があります。

さらに国を追加したいので、ループは同じ国のIDだけを通過するので、ループのパフォーマンスは向上します。したがって、国はコードで実装する必要があります。


だから、実際の状況は次のようになります。

ID1  ID2 Country(ID1) uniqueidentifier 

A14  A21  USA  XXER-WQEE-... 
A14  A55  USA  XXER-WQEE-... 
A21  A14  USA 
A21  A55  USA 
A55  A14  USA 
A55  A21  USA 
... 
A123  A22 Canada 
A22  A123 Canada 
... 

予想される出力は次のようになります。

ID1  ID2 Country(ID1) uniqueidentifier 

A14  A21  USA  XXER-WQEE-... 
A14  A55  USA  XXER-WQEE-... 
A21  A14  USA  XXER-WQEE-... 
A21  A55  USA  XXER-WQEE-... 
A55  A14  USA  XXER-WQEE-... 
A55  A21  USA  XXER-WQEE-... 
... 
A123  A22 Canada  IOKK-Q23A-... 
A22  A123 Canada  IOKK-Q23A-... 
... 


(私はIDができた、上記と同じIDを取りました任意のID)

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

関連する問題