在查询 Oracle SQL 中创建备用 ID

问题描述 投票:0回答:1

我正在尝试在 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 会阻止随机数在决赛桌中重新生成吗?

sql oracle masking
1个回答
0
投票

您可以使用

DENSE_RANK()
进行随机排序:

SELECT DENSE_RANK() OVER (ORDER BY UserID + dbms_random.value(1, 2147483647)) MaskedID, Value
FROM yourTable;
© www.soinside.com 2019 - 2024. All rights reserved.