2016-09-21 4 views
0

Dieser Titel mag am Anfang etwas verwirrend klingen, aber ich hoffe, mein Beispiel verdeutlicht meine Absichten.SQL Server - Gleiche IDs zu "übereinstimmenden" Variablen IDs

ID1  ID2 uniqueidentifier 

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

Hinter den IDs gibt es Firmennamen, die ich aufgrund einiger Kriterien gefunden habe. Grundsätzlich bedeutet das angezeigte Beispiel, dass ID 'A14' mit 'A21' übereinstimmt, aber auch andersherum (natürlich). Und dass es einen dritten Firmennamen gibt, der die Kriterien erfüllt.

Ich kann nicht gruppieren sie nach Firmennamen, wie die Namen manchmal anders geschrieben sind wie folgt:
- Die Example Company Corp.
- Example Company Corp.

Grundsätzlich sind die ersten 6 Zeilen würde haben die gleiche Kennung. Und die anderen beiden auch. Der Uniqueidentifier wird an dieser Stelle ein neuer sein, da ich diese Tabelle mit NEWID() aktualisieren möchte.

Die Frage ist: Wie kann ich uniqueidentifiers zuordnen kann (NEWID()), so dass es wie die Ausgabe

Irgendwelche Vorschläge für mein Problem sieht?

Ich wäre sehr glücklich für jede Art von Hilfe, da dies ein Problem ist, über das ich schon lange nachgedacht habe.

EDIT: Die erwartete Ausgabe sieht wie folgt aus:

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-... 
... 

Dank MG

+1

Können Sie bitte die erwartete Ausgabe anzeigen – TheGameiswar

+2

Woher kommt diese uniqueidentifier? –

+0

Ich würde die Tabelle in diesem Moment mit 'NEWID()' – mgruber

Antwort

1

ich das man denken, das Ergebnis geben sollte Sie wollen. Entschuldigung, es ist ein bisschen unordentlich. Stellen Sie Fragen, wenn Sie eine Erklärung benötigen.

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

Das war genau das, was ich gesucht habe! Daumen hoch!! – mgruber

+0

Hallo Valera! Ich habe eine weitere Antwort auf diese Frage über geänderte Anforderungen meiner ersten Frage hinzugefügt. Ich hoffe du kannst mir dabei helfen. Danke im Voraus! – mgruber

-1

Die Situation hat sich geändert und ich brauche den Code angepasst.
Es kommt vor, dass einige der IDs bereits eine eindeutige Kennung haben.

Der oben angegebene Code (von @Valera Soroka) berücksichtigt nur IDs, bei denen der Uniqueidentifier NULL ist. Das bedeutet, dass im Beispiel neue Zeilenbezeichner für Zeile 3-6 vergeben werden, wenn Zeile 1-2 bereits eine eindeutige Kennung hat. Der Code muss zuerst nach IDs mit eindeutiger Kennung suchen.

Zusätzlich möchte ich das Land hinzufügen, damit die Schleife leistungsfähiger wird, da die Schleife nur IDs mit demselben Land durchläuft. Also muss das Land im Code implementiert werden.


So ist die aktuelle Situation sieht wie folgt aus:

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 
... 

Die erwartete Ausgabe sollte wie folgt aussehen:

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-... 
... 


(Ich habe gerade die gleichen IDs, wie oben, die IDs könnte seien Sie irgendwelche IDs)

Vielen Dank für Ihre Hilfe! MG

Verwandte Themen