为什么 COALESCE return NULL 而不是我需要的值?
Why COALESCE return NULL instead of value I need?
从 table tblQuoteStatusChangeLog
我需要检查列 NewQuoteStatusID
是否具有这些值之一(2、25 或 202),并选择最早的时间戳。
所以如果它有值2
,则取TimeStamp
,如果它没有值2
则检查是否有25
并取对应的TimeStamp
,如果不是,则检查 202
并选择合适的邮票。
所以从 tblQuoteStatusChangeLog
我需要选择 StatusID 202 的第一行,因为它是唯一符合条件的行。
所以我有这个查询:
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
值
我在这里错过了什么?
谢谢
我认为 coalesce()
不是您想要的功能。 coalesce(2, 25, 2002)
returns 第一个非 NULL
值,始终为“2”。您的示例数据没有值“2”,所以这就是子查询 returns NULL
.
的原因
我想你可能想要 IN
:
SELECT (SELECT TOP (1) Timestamp
FROM tblQuoteStatusChangeLog
WHERE NewQuoteStatusID IN (2, 25, 202) AND
ControlNo = tblQuotes.ControlNo
ORDER BY Timestamp DESC
)
从 table tblQuoteStatusChangeLog
我需要检查列 NewQuoteStatusID
是否具有这些值之一(2、25 或 202),并选择最早的时间戳。
所以如果它有值2
,则取TimeStamp
,如果它没有值2
则检查是否有25
并取对应的TimeStamp
,如果不是,则检查 202
并选择合适的邮票。
所以从 tblQuoteStatusChangeLog
我需要选择 StatusID 202 的第一行,因为它是唯一符合条件的行。
所以我有这个查询:
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
值
我在这里错过了什么? 谢谢
我认为 coalesce()
不是您想要的功能。 coalesce(2, 25, 2002)
returns 第一个非 NULL
值,始终为“2”。您的示例数据没有值“2”,所以这就是子查询 returns NULL
.
我想你可能想要 IN
:
SELECT (SELECT TOP (1) Timestamp
FROM tblQuoteStatusChangeLog
WHERE NewQuoteStatusID IN (2, 25, 202) AND
ControlNo = tblQuotes.ControlNo
ORDER BY Timestamp DESC
)