首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为每个组选择前(N)行

为每个组选择前(N)行
EN

Stack Overflow用户
提问于 2011-10-19 12:14:19
回答 1查看 2.9K关注 0票数 2

到目前为止,我的查询如下:

代码语言:javascript
复制
SELECT [Id], [HotelName], [StarRating], [Description], [CheckinDate], [CheckoutDate], [Price], [ImageUrl]
FROM
(
    SELECT TOP (6) [Id], [HotelName], [StarRating], [Description], [CheckinDate], [CheckoutDate], [Price], [ImageUrl], RANK() OVER(PARTITION BY [StarRating] ORDER BY [StarRating]) AS Num
    FROM [dbo].[Hotel]
    WHERE [CityId] = @CityId 
    AND CheckinDate > GETDATE()
    AND [StarRating] IN (3, 4, 5)
) X
WHERE Num <= 2

我想要的是为每个星级得到2行:2个3级,2个4级和2个5级。我该怎么做?我已经在网上做了一些研究后想出了上面的想法,但我显然没有完全理解hwo来实现它,因为它不起作用……我得到了6排3的星级

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-19 12:27:51

使用ROW_NUMBER函数-例如,

代码语言:javascript
复制
WITH X 
AS
(
    SELECT 
       [Id], [HotelName], [StarRating], [Description], 
       [CheckinDate], [CheckoutDate], [Price], [ImageUrl], 
       ROW_NUMBER() OVER(PARTITION BY [StarRating] ORDER BY [Id]) AS Num
    FROM 
       [dbo].[Hotel]
    WHERE 
       [CityId] = @CityId 
         AND CheckinDate > GETDATE()
         AND [StarRating] IN (3, 4, 5)
) 
SELECT 
   [Id], [HotelName], [StarRating], [Description], 
   [CheckinDate], [CheckoutDate], [Price], [ImageUrl]
FROM 
   X
WHERE 
   Num <= 2
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7816457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档