这个标题在开头可能听起来有点令人困惑但我希望我的例子澄清我的意图。
ID1 ID2 uniqueidentifier
A14 A21
A14 A55
A21 A14
A21 A55
A55 A14
A55 A21
...
A123 A22
A22 A123
...
在ID后面有一个公司根据某些标准命名我匹配的。 基本上,显示的示例意味着ID'A14'与'A21'匹配,但反过来(当然)。并且有第三个公司名称符合标准。
我无法按公司名称对它们进行分组,因为名称的编写方式有时不同,如下所示:
- 示例公司公司
- 示例公司公司
基本上前6行将具有相同的标识符。另外两个也是。 此时,uniqueidentifier将是一个新的,因为我想用NEWID()更新此表。
问题是:我如何分配uniqueidentifiers(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-...
...
由于 MG
答案 0 :(得分: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
答案 1 :(得分:-1)
情况发生了变化,我需要修改代码。
发生一些ID已经具有uniqueidentifier。
上面公布的代码(由@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