SQL Server选择多个值,如果没有找到值,则返回null
问题描述:
我有一个查询SELECT TOP 1 Mat,Dat FROM TableLog WHERE Of=1 order by Id desc;
,它可能不会返回任何值。所以,我得到一个结果集是这样的:SQL Server选择多个值,如果没有找到值,则返回null
Mat | Dat
我想获得NULL值,而不是这样的事:
Mat | Dat
NULL NULL
我试着用SELECT (SELECT TOP 1 Mat,Dat FROM TableLog WHERE Of=1 order by Id desc)
这样做,但它仅适用,如果我有我的选择中有一个值!
任何想法,我怎么能做到这一点?谢谢!
答
嗯。这很棘手。一种方法使用聚合:
SELECT MAX(Mat) as Mat, MAX(Dat) as Dat
FROM (SELECT TOP 1 Mat, Dat
FROM TableLog
WHERE Of = 1
ORDER BY Id desc
) md;
聚合查询没有GROUP BY
始终保证返回一行。
答
这也可以工作,不需要聚合。
DECLARE @TableLog TABLE (
Id INT,
Mat INT,
Dat INT,
[Of] INT);
INSERT INTO @TableLog
VALUES (1, 2, 2, 2);
SELECT TOP (1) Mat, Dat
FROM (SELECT Mat, Dat, Id
FROM @TableLog
WHERE [Of] = 2
UNION ALL
SELECT NULL, NULL, NULL) AS T
ORDER BY Id DESC;
如果您删除插入,它会返回NULL值。无法分辨这是否比Gordon Linoff建议的效率更高。
+0
谢谢你的回答,用我目前的表格大小我不知道哪个查询效率更高。如果我看到差异,我会再试一次,当它会更大并且回到这个问题时! –
我试过了,它完美地工作,谢谢你的回答 –