问题描述
当我在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