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)
您确实应该使用该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% 的行。从你的问题中我可以看出,这满足你的要求,是最简单的方法。
归档时间: |
|
查看次数: |
3598 次 |
最近记录: |