Sql Select语句时的大小写
每个名称至少有4个不同的Sql Select语句时的大小写,sql,sql-server,database,Sql,Sql Server,Database,每个名称至少有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)
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
子查询中缺少from子句和相关条件 如果没有from子句,子select中的
td
与外部select中的td
相同,换句话说,'01'
或'02'
中的一个和where子句测试消除该行,从而导致空值
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
是什么告诉您查询有问题?后果错误消息。。。?从技术上讲,我想这个问题没有错。但我总是得到一个空值。我想得到一个不同的td。你能发布一些示例数据吗?
CASE
在T-SQL中是一个返回一个原子值的表达式(如a+b
),它不是一个语句,无法控制代码执行流等。