选择声明时的情况

时间:2016-06-15 16:42:48

标签: sql sql-server database

每个名称至少有4个不同的td。当0102附加到该名称后,我想从该名称的最新付款日期将td更改为td

但是,我持续获得NULL值。这个查询出了什么问题?

SELECT
    name, 
    CASE WHEN td in ('01', '02') 
         THEN (SELECT TOP 1 td 
               WHERE td not in ('01', '02') 
               ORDER BY paydate DESC) 
         ELSE td 
    END
FROM tdtest

1 个答案:

答案 0 :(得分:3)

您在子查询中缺少from子句和相关条件。

如果没有from子句,则子选择中的td与外部选择中的td相同,换句话说,'01''02'之一where子句test消除了行,导致NULL。

SELECT
    name, 
    CASE WHEN td in ('01', '02') 
         THEN (SELECT TOP 1 td
               FROM TdTest InnerTDTest -- table to look in
               WHERE InnerTDTest.Name = TDTest.Name -- only look at matching rows.
               AND td not in ('01', '02') 
               ORDER BY paydate DESC) 
         ELSE td 
    END
FROM tdtest