从SQL Server表中选择唯一的随机行,但始终重复

我不是最好的sql但我尽我所能来完成我的问题。 我有一个表“just”,其中填充了列(ID(PK,Identity),Char,Serv,Random)。 现在我想从该表中选择一个随机行并将其插入表“f_WinGet”。 到目前为止,我的所有程序都采用了这一步,但我总是在第二个表中获得Duplicates。

第一个表:84行第二个表:84个随机需要35个。

我尝试了很多其他方法,但我总能得到相同的结果。 我的所有随机程序都绑定到Button ia C#Programm。 到目前为止一切正常,但我的表中总是有一些重复的行。

INSERT INTO f_TWinGet SELECT TOP 1 Percent Char, Serv, Random FROM ( select distinct Char, Serv, Random from dbo.just) as derived1 ORDER BY CHECKSUM(NEWID()) 

如果有人有一个想法我怎么能解决我的问题,这将是很好的。 我还在努力,但我得到的所有结果都是一样的。

使用与您一样小的桌子,您可以使用以下内容:

 INSERT INTO f_TWinGet SELECT TOP 1 j.Char, j.Serv, j.Random FROM dbo.just j LEFT JOIN f_TWinGet f ON f.Char = j.Char AND j.Serv = f.Serv AND j.Random = f.Random WHERE f.Char IS NULL ORDER BY NEWID() 

这样可以确保您尝试插入的值不在最终表中。

你要插入35行,一次完成所有操作:

 INSERT INTO f_TWinGet(char, serv, random) SELECT TOP 35 Char, Serv, Random FROM (select distinct Char, Serv, Random from dbo.just ) derived1 ORDER BY CHECKSUM(NEWID()); 

如果你真的想一次做一个,我建议使用not exists

 INSERT INTO f_TWinGet(char, serv, random) SELECT TOP 1 Char, Serv, Random FROM (select distinct Char, Serv, Random from dbo.just ) d WHERE not exists (select 1 from f_TWinGet f where t.char = f.char and t.serv = f.serv and t.random = f.random) ORDER BY CHECKSUM(NEWID()); 

请注意, char是一个保留字,因此它应该是方括号。 我在你的查询中留下你拥有它们的名字。