来自不同表的SQL输出Y / N比较日期列

问题描述

我想输出Y或N。如果cc.date1 = T.date,则为“ Y”。或者,如果cc.date1 < T.date则为'N'。我不太确定如何在下面的查询中表达这一点,并欢迎提出任何建议。 cte是更大的存储过程查询块的一部分。我目前正在使用sql Server 2008 R2(V10.50)。谢谢

WITH cte_new AS
(
SELECT CC.ID,CC.col1,CC.col2,CC.col3,ROW_NUMBER() OVER(PARTITION BY CC.ID ORDER BY CC.date1 DESC) AS row_num
FROM table1 AS CC
INNER JOIN #temp AS T 
ON CC.ID = T.ID
WHERE CC.col1 = 'CNT'
AND CC.col2 = 'NEW'
AND CC.date1 = T.date
OR CC.date1 < T.date
)
SELECT *
INTO #NewOld
FROM cte_new
WHERE row_num = 1

解决方法

我不确定您查询的意图是否正确。但是,WHERE逻辑看起来不正确。你有:

WHERE CC.col1 = 'CNT' AND
      CC.col2 = 'NEW' AND
      CC.date1 = T.date OR
      CC.date1 < T.date

我很确定你打算这样做

WHERE CC.col1 = 'CNT' AND
      CC.col2 = 'NEW' AND
      CC.date1 <= T.date

您的版本被解析为:

WHERE (CC.col1 = 'CNT' AND CC.col2 = 'NEW' AND CC.date1 = T.date) OR
      CC.date1 < T.date