我正在尝试在 SQL 查询中添加一列以用作备用 ID。 数据的格式如下:
UserID | Value
---------------
1 | 23
2 | 10
1 | 45
我想创建另一个列,它是另一个数字,但尊重 ID 的唯一性。像这样
MaskedID | Value
---------------
9 | 23
8 | 10
9 | 45
我尝试使用子查询创建一个带有随机数的表,但随机数对于第一个 ID 来说并没有保持不变:
Select b.Masked, a.value
from table a
left join
(select distinct(UserID), dbms_random.value(1,100000) as Masked) b on a.UserID=b.UserID
但这会导致:
MaskedID | Value
---------------
7 | 23
8 | 10
9 | 45
用户 ID 的数量可能会随着时间而变化,因此不应该预先定义。 CTE 会阻止随机数在决赛桌中重新生成吗?
您可以使用
DENSE_RANK()
进行随机排序:
SELECT DENSE_RANK() OVER (ORDER BY UserID + dbms_random.value(1, 2147483647)) MaskedID, Value
FROM yourTable;