返回完整记录集的百分比

Lum*_*mpy 1 sql-server query t-sql sql-server-2008-r2

我正在拉回订单列表,但我只需要显示一定比例的记录。例如,我们想要前 30 名或前 50 名。百分比是可变的,所以我不想使用 TOP。我尝试了下面的代码,但没有返回任何记录。

SELECT x.SelectionCriteriaID, 
       x.DeliveryCriteriaID, 
       x.SurveyID, 
       x.intappid, 
       x.intcustomerID, 
       x.intorderid, 
       x.RowNumber RowNumber,
       x.cntoid
  FROM (SELECT @SelectionCriteriaID SelectionCriteriaID, 
               @DeliveryCriteriaID DeliveryCriteriaID, 
               @SurveyID SurveyID, 
               ord.intappid, 
               ord.intcustomerID, 
               ord.intorderid, 
               ord.cntoid,
               ROW_NUMBER() OVER (ORDER BY ord.intcustomerid) AS RowNumber
          FROM ord
         WHERE ord.cntoid >= ISNULL(@MinNumberOrders, 1)
           AND ord.cntoid < ISNULL(@MaxNumberOrders, 999999999))x
 GROUP BY x.SelectionCriteriaID, x.DeliveryCriteriaID, x.SurveyID, x.intappid, x.intcustomerID, x.intorderid, x.RowNumber, x.cntoid
 HAVING x.rownumber < MAX(x.RowNumber)/(100/@percent)
Run Code Online (Sandbox Code Playgroud)

Tho*_*ger 5

您确实应该使用该TOP条款。这是完全合法的(假设您使用的是 SQL Server):

declare @top_val int = 30

select top (@top_val) percent
    col1,
    col2,
    col3
from yourTable
order by <something>;
Run Code Online (Sandbox Code Playgroud)

上述查询将选择前 30% 的行。从你的问题中我可以看出,这满足你的要求,是最简单的方法。

  • 当您使用“TOP”时,真正添加一个“ORDER BY”。除非您不关心将返回哪些结果 - 而您只关心返回的行数。 (3认同)