问题描述
我想输出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