2017-05-08 166 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'決定了返回的內容。 –

相關問題