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
当我在 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