添加第二个CASE WHEN列完全更改查询结果?

时间:2012-06-05 04:22:28

标签: sql sql-server sql-server-2008 tsql

我有以下疑问:

1

SELECT TOP 1
    CASE WHEN latency=-1
        THEN 'Down'
        ELSE 'Up'
    END AS status
FROM
    @pings_temp
ORDER BY datetime DESC;

2

SELECT TOP 1
    CASE WHEN latency=-1
        THEN 'Down'
        ELSE 'Up'
    END AS status,
    CASE WHEN latency=-1
        THEN
        (
            SELECT TOP 1
                datetime
            FROM
                @downtimes_temp
            ORDER BY
                datetime DESC
        )
        ELSE NULL
    END AS datetime
FROM
    @pings_temp
ORDER BY datetime DESC;

第一个应该只产生' Up ',第二个应该在第一列产生' Up ',在第二列产生 NULL

但是,这不会发生。第一个查询确切地执行它应该如何,但是将第二列添加到SELECT会使查询变得狂暴,导致它从看似随机的列中读出' Down '和日期。

这是一个image of the two results from the same T-SQL batch

1 个答案:

答案 0 :(得分:3)

第二种情况中的错误可能是由ORDER BY子句引起的,因为引擎无法评估NULL值的顺序。