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始终保证返回一行。

+0

我试过了,它完美地工作,谢谢你的回答 –

这也可以工作,不需要聚合。

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

谢谢你的回答,用我目前的表格大小我不知道哪个查询效率更高。如果我看到差异,我会再试一次,当它会更大并且回到这个问题时! –