我需要得到每个地区,市场和名称的前10名的结果,以及那些最高的计数(差距)。有4个区域,有1到N个市场。我可以获得前10名,但如果不使用每个市场的联盟,我就不知道如何做到这一点。关于如何做到这一点有什么想法吗?
SELECT DISTINCT TOP 10 
    Region, Market, Name, Gaps 
FROM
    TableName
ORDER BY 
    Region, Market, Gaps DESC 发布于 2014-08-12 22:11:49
一种方法是使用CTE (公用表表达式),如果您使用的是SQL Server 2005和更高版本(您在这方面还不够具体)。
使用这个CTE,你可以用一些标准来划分你的数据--比如你的Region, Market, Name --并且让SQL Server对你所有的行进行编号,每个“分区”都是从1开始的,按照一些标准排序。
所以试着这样做:
;WITH RegionsMarkets AS
(
   SELECT 
       Region, Market, Name, Gaps,
       RN = ROW_NUMBER() OVER(PARTITION BY Region, Market, Name ORDER BY Gaps DESC) 
   FROM 
       dbo.TableName
)
SELECT 
   Region, Market, Name, Gaps
FROM 
   RegionsMarkets
WHERE
   RN <= 10在这里,我只为每个“分区”(即每个Region, Market, Name元组)选择“第一个”条目-按Gaps降序排序。
这样,您就得到了每个(Region, Market, Name)元组的前10行--这接近您想要的结果了吗?
发布于 2014-08-12 22:11:01
我觉得你想要row_number()
select t.*
from (select t.*,
             row_number() over (partition by region, market order by gaps desc) as seqnum
      from tablename t
     ) t
where seqnum <= 10;我不确定您是否希望在partition by子句中使用name。如果你在一个市场中有一个以上的名字,那可能就是你正在寻找的。(提示:样本数据和期望的结果确实可以帮助澄清问题。)
https://stackoverflow.com/questions/25266470
复制相似问题