从SQL表中只获得1个结果(null或带日期)

时间:2014-01-29 11:53:08

标签: sql sql-server

我有一个表名ItemMedia,有两行

ID   Source    FromDate     ToDate
----------------------------------
122  122A.jpg  NULL         NULL
122  122B.jpg  1/1/14       1/2/14

我想只返回一行,如果今天不在FromDateToDate之间,则返回“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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您只想返回一行带有一些优先规则。您可以使用toporder 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);