Sql 使用随机行和重复项防止重复
我有一个数据集,我需要随机选择x个符合特定标准的行数,x个符合其他标准的行数,等等,并在一个表中输出结果。我一直在使用以下方法:Sql 使用随机行和重复项防止重复,sql,random,random-sample,distinct-values,newid,Sql,Random,Random Sample,Distinct Values,Newid,我有一个数据集,我需要随机选择x个符合特定标准的行数,x个符合其他标准的行数,等等,并在一个表中输出结果。我一直在使用以下方法: SELECT * FROM (SELECT TOP 1000 * FROM dbo.[Client List] WHERE Source = 'HC' AND Service = 'Service1' AND Provider = 'ProviderName1' ORDER BY NEWID()) Table1 UNION ALL SELECT * FROM (S
SELECT * FROM (SELECT TOP 1000 * FROM dbo.[Client List]
WHERE Source = 'HC' AND Service = 'Service1' AND Provider = 'ProviderName1'
ORDER BY NEWID()) Table1
UNION ALL
SELECT * FROM (SELECT TOP 500 * FROM dbo.[Client List]
WHERE Source = 'HC' AND Service = 'Service2' AND Provider = 'ProviderName2'
ORDER BY NEWID()) Table2
UNION ALL
SELECT * FROM (SELECT TOP 2200 * FROM dbo.[Client List]
WHERE Source = 'BA' AND Service = 'Service3' AND Provider = 'ProviderName3'
ORDER BY NEWID()) Table3
这是可行的,但有一个问题:它允许选择重复的客户端标识符dbo.[client List].[ClientID]。我的所有结果必须是唯一的客户
换句话说,它必须进行第一次随机选择,然后进行第二次随机选择,而不能选择在第一次选择中选择的任何clientid,依此类推。是的,我意识到这在技术上不是随机的。有没有办法在每个后续SELECT的WHERE语句中添加某种代码,或者需要重新考虑代码的整个结构?谢谢 像这样的怎么样
with Service1 as
(
SELECT TOP 1000 *
FROM dbo.[Client List]
WHERE Source = 'HC'
AND Service = 'Service1'
AND Provider = 'ProviderName1'
ORDER BY NEWID()
)
, Service2 as
(
SELECT TOP 500 *
FROM dbo.[Client List]
WHERE Source = 'HC'
AND Service = 'Service2'
AND Provider = 'ProviderName2'
AND ClientID not in (select ClientID from Service1)
ORDER BY NEWID()
)
, Service3 as
(
SELECT TOP 2200 *
FROM dbo.[Client List]
WHERE Source = 'BA'
AND Service = 'Service3'
AND Provider = 'ProviderName3'
AND ClientID not in (select ClientID from Service1)
AND ClientID not in (select ClientID from Service2)
ORDER BY NEWID()
)
select *
from Service1
union all
select *
from Service2
union all
select *
from Service3