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

问题描述

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

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

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

我需要有一个单独的列,该列将唯一地标识整个结果集,无论ID1和ID2的每个组合产生什么新标识符,无论何时执行选择。我不允许使用临时表,显然对结果集使用 ROW_NUMBER()之类的技巧也将不起作用,因为在某些情况下它们可能为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 |

当其中一个表从另一张表获取对应于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