从表中选择前N个随机行,然后按列排序

Dav*_*vid 2 sql sql-server random select

我需要从表中获取3个随机行,然后通过BannerWeight列对这些行进行排序.

所以,如果数据是:

BannerID     BannerWeight
   1               5
   2               5
   3               10
   4               5
   5               10
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

BannerID     BannerWeight
   5               10
   2               5
   4               5
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有:

SELECT TOP 3 b.BannerID, b.BannerWeight FROM CMS_Banner b
INNER JOIN CMS_BannerCategory c ON b.BannerCategoryID = c.BannerCategoryID
WHERE c.BannerCategoryName LIKE 'HomepageSponsors'
ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)

一旦得到它们,我就无法弄清楚如何订购这3个随机行.我试过了

 ORDER BY BannerWeight, NEWID()
Run Code Online (Sandbox Code Playgroud)

但这只能让我获得3个随机行,其中BannerWeight为5.

这是一个SQLFiddle:http://sqlfiddle.com/#!6/a8088/2/0

APH*_*APH 5

最简单的选择(我认为)是使用子查询:

Select * from 
    (
    SELECT TOP 3 b.BannerID, b.BannerWeight FROM Banners b
    ORDER BY NEWID()
    ) a
order by a.bannerweight
Run Code Online (Sandbox Code Playgroud)