SQL - 需要基于两个整数列的附加唯一标识符列的解决方案

SQL - Need a solution of additional unique identifier column based on two integer columns

当我在 SELECT 语句中连接两个 table 时,我在结果集中的第 1 列中得到了一些重复项,如下所示:

|     ID1 |     ID2 |
|      12 |      34 |
|      12 |       4 |
|     123 |       1 |
|     123 |       4 |

但 ID1、ID2 的组合在我的结果集中始终是唯一的。

我需要有一个单独的列来唯一标识整个结果集,ID1、ID2 的每个组合都会产生相同的新标识符,无论当我执行 select 时。我不允许使用临时 tables,显然像 ROW_NUMBER () 这样的技巧对结果集也不起作用,因为它们可能会产生在两个 tables 中的一些更新后,ID1、ID2 的相同组合的不同标识符。

我尝试了将 select 语句中的两个整数连接成一个整数的技术,如下所示:

SELECT ID1, ID2,
CAST(CONCAT(CAST(ID1 AS nvarchar(100)), CAST(ID2 AS nvarchar(100))) AS INT) AS Identifier

但也没有解决问题,因为现在不同的组合可能得到相同的标识符:

'12' + '34' = '1234'
'123' + '4' = '1234'

我需要这样的东西:

|     ID1 |     ID2 | Identifier |
|      12 |      34 |          1 |
|      12 |       4 |          2 |
|     123 |       1 |          3 |
|     123 |       4 |          4 |

并且当其中一个 table 从另一个 table 中获取对应于 ID = 12 的新行时,之前定义的标识符将保持不变,如下所示:

|     ID1 |     ID2 | Identifier |
|      12 |      34 |          1 |
|      12 |       4 |          2 |
|      12 |       2 |        578 |
|     123 |       1 |          3 |
|     123 |       4 |          4 |

也就是说,无论我何时执行 SELECT 语句,整数 ID1、ID2 的每个组合都会产生相同的新标识符。我将如何创建标识符列来满足我的需要?

如果你事先知道这些整数的最大值,那么你可以使用算术。

假设它们的范围是 0 到 999,那么:

id1 * 1000 + id2 as identifier