我有这样的查询:
(如你所见,我想检索总行数的50%或前100行等)
//@AllRowsSelectType is INT
SELECT TOP (
case @AllRowsSelectType
when 1 then 100 PERCENT
when 2 then 50 PERCENT
when 3 then 25 PERCENT
when 4 then 33 PERCENT
when 5 then 50
when 6 then 100
when 7 then 200
end
) ROW_NUMBER() OVER(ORDER BY [id]) AS row_num, a,b,c etc
Run Code Online (Sandbox Code Playgroud)
为什么我有错误:"关键字'PERCENT'附近的语法不正确." 在线"当1 [...]"
TOP的语法是:
TOP (expression) [PERCENT]
[ WITH TIES ]
Run Code Online (Sandbox Code Playgroud)
的保留关键字 PERCENT不能包括在表达.相反,您可以运行两个不同的查询:一个用于何时需要PERCENT,另一个用于不需要时.
如果您需要将其作为一个查询,则可以运行两个查询并使用UNION ALL来组合结果:
SELECT TOP (
CASE @AllRowsSelectType
WHEN 1 THEN 100
WHEN 2 THEN 50
WHEN 3 THEN 25
WHEN 4 THEN 33
ELSE 0
END) PERCENT
ROW_NUMBER() OVER(ORDER BY [id]) AS row_num, a, b, c, ...
UNION ALL
SELECT TOP (
CASE @AllRowsSelectType
WHEN 5 THEN 50
WHEN 6 THEN 100
WHEN 7 THEN 200
ELSE 0
END)
ROW_NUMBER() OVER(ORDER BY [id]) AS row_num, a, b, c, ...
Run Code Online (Sandbox Code Playgroud)