每个名称至少有4个不同的td
。当01
或02
附加到该名称后,我想从该名称的最新付款日期将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
答案 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