假设我有下表:
unitid | transtatus | currency
---------------------------------------
1024393230 | not_started | GBp - Pence
1024397398 | in_progress | GBp - Pence
1024397398 | not_started | USd - Cent
1024397408 | not_started | GBp - Pence
1024397408 | not_started | EUR
1024401371 | not_started | GBp - Pence
1024403375 | in_progress | GBp - Pence
我想为QC选择随机行我可以通过
来完成select top 3
tbble.unitid,tbble.transtatus, tbble.currency
from tbble
order by newid()
然而,由于某些行共享相同的unitid(如果是这种情况),我想拉出与此unitid关联的所有行
因此查询将返回:(如果随机行只有一行用于此unitid)
unitid | transtatus | currency
---------------------------------------
1024393230 | not_started | GBp - Pence
1024401371 | not_started | GBp - Pence
1024403375 | in_progress | GBp - Pence
或:(如果与此unitid关联的两行)
1024397398 | in_progress | GBp - Pence
1024397398 | not_started | USd - Cent
1024401371 | not_started | GBp - Pence
1024403375 | in_progress | GBp - Pence
我不确定如何实现这一目标。也许首先计算单位出现次数然后如果计数超过1然后将这些加到初始随机样本中?
答案 0 :(得分:2)
也许您可以使用子查询分两步工作:首先使用子查询选择一些随机unitid
,然后对于每个子查询,使用相同的{{1}选择表中的整行}。它应该是这样的:
unitid
答案 1 :(得分:1)
您应该使用WITH TIES
子句来获取匹配的行
select top 3 WITH TIES *
tbble.unitid,tbble.transtatus, tbble.currency
from tbble
order by newid()
答案 2 :(得分:1)
我认为这可以实现您想要的,即三个随机单位ID及其所有行:
select t.*
from tbble t join
(select top 3 t.unitid
from (select distinct t.unitid from tbble t) t
order by newid()
) tt
on t.unitid = tt.unitid