SQL 服务器 - 将相同的 ID 授予 "matching" 变量 ID

SQL Server - Granting same IDs to "matching" Variables IDs

这个标题一开始可能听起来有点混乱,但我希望我的例子能阐明我的意图。

ID1      ID2   uniqueidentifier

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

ID 后面是我根据某些条件匹配的公司名称。 基本上显示的示例意味着,ID 'A14' 与 'A21' 匹配,但也可以反过来(当然)。还有第三个公司名称符合条件。

我无法按公司名称对它们进行分组,因为有时名称的写法会有所不同,如下所示:
- 示例公司 Corp.
- Example Company Corp.

基本上前 6 行将具有相同的标识符。还有另外两个。 此时 uniqueidentifier 将是一个新的,因为我想用 NEWID().

更新这个 table

问题是:如何分配唯一标识符 (NEWID()) 使其看起来像输出

对我的问题有什么建议吗?

我很乐意提供任何形式的帮助,因为这是我思考了很长时间的问题。

编辑:预期输出如下所示:

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

谢谢 毫克

我觉得这个应该能给你想要的结果。抱歉,有点乱。如果您需要解释,请提出问题。

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

情况变了,我需要修改代码。
某些 ID 已具有唯一标识符。

上面发布的代码(@Valera Soroka)仅考虑唯一标识符为 NULL 的 ID。这意味着如果第 1-2 行已经有一个唯一标识符,它将在示例中为第 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)

非常感谢您的帮助! 毫克