2017-05-08 186 views
2

从表tblQuoteStatusChangeLog我需要检查列NewQuoteStatusID是否有其中的一个值(2,25或202),并选择最早的TimeStamp。 所以,如果它的价值2,然后拿起TimeStamp,如果它不具有价值2然后检查是否有25,拿起相应TimeStamp,如果它不是那么检查202,并挑选了合适的邮票。为什么COALESCE返回NULL而不是我需要的值?

因此从tblQuoteStatusChangeLog我需要拿起StatusID 202的第一行,因为它是唯一的条件。

enter image description here

所以我有这个疑问:

SELECT 
     (SELECT  TOP (1) Timestamp 
        FROM   tblQuoteStatusChangeLog 
        WHERE  NewQuoteStatusID = COALESCE (2,25,202) AND ControlNo = tblQuotes.ControlNo 
        ORDER BY Timestamp DESC) as DateQuoted 
FROM tblQuotes 
INNER JOIN tblMaxQuoteIDs ON tblQuotes.QuoteID = tblMaxQuoteIDs.MaxQuoteID 
where tblQuotes.ControlNo = 50065 

但由于某种原因,我得到了NULL值结果

enter image description here

缺少什么我在这里? 谢谢

回答

3

我不认为coalesce()是你想要的功能。 coalesce(2, 25, 2002)返回始终为“2”的第一个非NULL值。您的示例数据没有值“2”,因此子查询返回NULL

我想你可能想IN

SELECT (SELECT TOP (1) Timestamp 
     FROM tblQuoteStatusChangeLog 
     WHERE NewQuoteStatusID IN (2, 25, 202) AND 
       ControlNo = tblQuotes.ControlNo 
     ORDER BY Timestamp DESC 
     ) 
+0

哦!它只适用于非'NULL'。得到它了。 谢谢。 然后让我们说,如果我将有值2和25.什么'IN'会拿起?第一个是2还是第二个是25? – Oleg

+0

@Oleg。 。 。它会挑选所有匹配的。 'ORDER BY'和'TOP'决定了返回的内容。 –