T SQL使用WHEN ORDER BY扩展WHERE CLAUSE

时间:2016-02-02 15:09:41

标签: sql sql-server tsql

我在T SQL中遇到问题。我想在CASE WHEN子句中使用WHERE子句扩展我的语句,该子句取决于局部变量@ counter2。

当@ counter2的值为' 2' ,整个陈述应该用FETCH NEXT子句扩展,如下所示,在10 000行后停止。

目前我有以下声明用于测试,但它不能像这样工作。如果@ counter2变量没有值' 2'该陈述应在条款where ID not in (1,2)之后完成。

是否可以这样做?

DECLARE @counter2 INT = 0;

WHILE @counter2 <= 1
BEGIN
    SET @counter2 = @counter2 + 1

    SELECT *
    FROM companies
    WHERE ID NOT IN (1,2)
        AND CASE WHEN @counter2 = 2 THEN 
            ORDER ORDER ID
            OFFSET 0 ROWS
            FETCH NEXT 10000 ROWS ONLY
    END

END

2 个答案:

答案 0 :(得分:1)

您可以在FETCH NEXT中使用case语句,如下所示:

DECLARE @counter2 INT = 2

SELECT
    my_columns -- because we never use SELECT *
FROM
    Companies
WHERE
    id NOT IN (1, 2)
ORDER BY
    id
OFFSET 0 ROWS
FETCH NEXT
    CASE
        WHEN @counter2 = 2 THEN 10000
        ELSE 999999999
    END ROWS ONLY

答案 1 :(得分:0)

我不确定你要做什么,但是IsNumeric()会返回0或1.它不会返回2.此外,你不能使order by有条件。

也许你想要的条件是:

order by (case when @count2 = 2 then COPSYS_ID end)