T-SQL SELECT TOP的问题(案例[...])

Ton*_*ony 3 t-sql

我有这样的查询:

(如你所见,我想检索总行数的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 [...]"

Mar*_*ers 5

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)