SQL Server按周判断价格19.17000是否存在的查询结果不符问题
问题根因
现有代码所有行都被标记为存在的核心原因是:EXISTS子查询没有和外层当前行的公司ID、年份、周数做关联匹配,只要全表存在任意一条价格为19.170000的记录,所有行的判断都会返回真,不符合按周维度标记的需求。
修正后代码
SELECT CASE WHEN EXISTS ( SELECT 1 FROM table1 t2 WITH (NOLOCK) WHERE t2.Price = 19.170000 -- 关联外层当前行的维度,仅判断当前周是否存在目标价格 AND t2.companyId = t1.companyId AND YEAR(t2.calendarDate) = YEAR(t1.calendarDate) AND DATEPART(WEEK, t2.calendarDate) = DATEPART(WEEK, t1.calendarDate) ) THEN '存在记录' ELSE '不存在记录' END AS 交易标记, YEAR(calendarDate) AS 年份, DATEPART(WEEK, calendarDate) AS 周数, calendarDate AS 日历日期, Price AS 价格 FROM table1 t1 WHERE companyId = 18527
逻辑说明
修改后子查询会针对外层每一行的所属公司、年份、周数单独做校验:只要该周内存在任意一天价格为19.170000,该周所有行都会标记为存在,否则标记为不存在,完全匹配预期输出要求。
内容的提问来源于stack exchange,提问作者elchapo
相关产品推荐
相关产品推荐

