我有一个表名ItemMedia
,有两行
ID Source FromDate ToDate
----------------------------------
122 122A.jpg NULL NULL
122 122B.jpg 1/1/14 1/2/14
我想只返回一行,如果今天不在FromDate
到ToDate
之间,则返回“FromDate”和“ToDate”中带有NULL值的行
我已经尝试过这个SQL语句
IF (SELECT ItemID FROM ItemsMedia
WHERE (FromDate<=GETDATE() AND ToDate>=GETDATE())) IS NOT NULL
BEGIN
SELECT Source FROM ItemsMedia
WHERE (FromDate<=GETDATE() AND ToDate>=GETDATE())
END
ELSE
BEGIN
SELECT Source FROM ItemsMedia
WHERE (FromDate IS NULL AND ToDate IS NULL)
END
哪个有效,但源是其他相关表(ItemText,ItemDetails等)的一部分,我需要将所有这些作为一个结果返回。所以我从语句中得到的Source
是一个更大的SQL语句的一部分,所以我可以得到这个样本的最终结果
ID Source Text Details
----------------------------------
122 122B.jpg Some Text Some Details
答案 0 :(得分:1)
如果我理解正确,您只想返回一行带有一些优先规则。您可以使用top
和order by
:
SELECT top 1 im.*
FROM ItemsMedia im
ORDER BY (case when FromDate <= GETDATE() AND ToDate >= GETDATE()
then 1
when FromDate IS NULL AND ToDate IS NULL
then 2
else 3
end);