我的桌子像
ID RANDOM_ID
1 123
10 456
25 789
1 1112
55 1314
10 1516
我希望结果像这样:
ID RANDOM_ID
1 123
10 456
25 789
1 123
55 1314
10 456
相同的ID应该具有相同的random_id。创建表后,我正在使用update语句生成Random_ID。
CREATE TABLE [RANDOMID_TABLE]([ID] [int] NULL, [RANDOM_ID] [int] NULL)
GO
INSERT INTO [RANDOMID_TABLE] ([ID])
select distinct ABC_ID from RANDOMID_ABC
GO
******** This is the update statement for the RANDOM_ID column in
[RANDOMID_TABLE] table ************
UPDATE [RANDOMID_TABLE]
SET RANDOM_ID = abs(checksum(NewId()) % 1000000)
我还需要添加到更新语句中吗?
请告知。
答案 0 :(得分:1)
为什么要为此使用update
?只需在插入它们时生成值即可:
insert into [RANDOMID_TABLE] (ID, RANDOM_ID)
select ABC_ID, abs(checksum(NewId()) % 1000000)
from RANDOMID_ABC
group by ABC_ID;
编辑:
如果您的问题是冲突,请确定如何进行分配。只需分配一个数字即可。 。 。随机:
insert into [RANDOMID_TABLE] (ID, RANDOM_ID)
select ABC_ID, row_number() over (order by newid())
from RANDOMID_ABC
group by ABC_ID;
保证不会返回重复项。
答案 1 :(得分:1)
总的来说,您是否只是想Always on
该表,以便特定UPDATE
的所有值对ID
具有相同的值?这样吗?
Random_ID
答案 2 :(得分:0)
这是使用临时表所需的脚本(您需要它来保留每个唯一ID的随机结果):
DECLARE @Tbl TABLE (ID INT, RANDOM_ID INT)
INSERT @Tbl (Id) VALUES(1), (10), (25), (1), (55), (10)
SELECT Id, abs(checksum(NewId()) % 1000000) AS Random_Id INTO #distinctData FROM @Tbl GROUP BY Id
SELECT D.* FROM @Tbl T JOIN #distinctData D ON D.ID = T.ID
DROP TABLE #distinctData
很明显,您不需要在我创建和初始化数据表的前两行
结果:
Id Random_Id
1 354317
1 62026
10 532304
10 604768
25 874209
55 718643
答案 3 :(得分:0)
您想要每个ID一个随机值。因此,人们应该认为以下方法会起作用:
#pragma comment(lib, "user32")
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
void fontsize(int a, int b) {
PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx = new CONSOLE_FONT_INFOEX();
lpConsoleCurrentFontEx->cbSize = sizeof(CONSOLE_FONT_INFOEX);
GetCurrentConsoleFontEx(out, 0, lpConsoleCurrentFontEx);
lpConsoleCurrentFontEx->dwFontSize.X = a;
lpConsoleCurrentFontEx->dwFontSize.Y = b;
SetCurrentConsoleFontEx(out, 0, lpConsoleCurrentFontEx);
}
void main() {
fontsize(12, 16);
cout << "text" << endl;
system("pause");
}
但是不是。 SQL Server在这里有些问题,但仍然为相同的ID创建不同的数字。
因此,最好的选择可能是:执行确实会创建不同值的更新(您的原始更新语句)。然后按如下所示纠正数据:
with ids as
(
select distinct id
from randomid_table
)
, ids_with_rnd as
(
select id, abs(checksum(NewId()) % 1000000) as rnd
from ids
)
update randomid_table
set random_id =
(
select rnd
from ids_with_rnd
where ids_with_rnd.id = randomid_table.id
);
演示:https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=504236db66fba0f12dc7e407a51451f8