2015-12-03 22 views
1

说我有如下表:如何在按列分组之后随机选择行?

MyTable的

id | val | val2 
--------------- 
1 | 'a' | 1.2 
1 | 'b' | 2.3 
1 | 'c' | 3.4 
2 | 'b' | 4.5 
2 | 'c' | 5.6 
2 | 'b' | 6.7 
2 | 'a' | 7.8 
2 | 'd' | 8.9 

我想要一个查询,将随机回报每个独特id行之一。但结果不应该“分开”valval2之间的配对。所以

id | val | val2 
--------------- 
1 | 'a' | 1.2 
2 | 'b' | 4.5 

是一个有效的结果,但

id | val | val2 
--------------- 
1 | 'a' | 1.2 
2 | 'b' | 5.6 

不是。

在此先感谢您的帮助。

回答

2

您可以使用ROW_NUMBERNEWID()的随机排序:

SELECT 
    id, val1, val2 
FROM (
    SELECT *, 
     Rn = ROW_NUMBER() OVER(PARTITION BY id ORDER BY NEWID()) 
    FROM tbl 
)t 
WHERE Rn = 1