SQL Server按日期范围关联EMPLOYEE与SALES表统计入职30天销量
错误原因
你第二次查询报错是因为普通聚合子查询的作用域仅限于自身内部,无法直接访问外层EMPLOYEE表的HIRE_DATE字段,因此筛选条件中引用该字段时会触发未识别字段的报错。
正确写法(两种方案均可,第一种更简洁,完全匹配你期望的输出格式)
方案1:标量子查询(无符合销量时自动返回NULL,和预期结果一致)
SELECT e.*, ( SELECT COUNT(*) FROM SALES s WHERE s.EMPID = e.EMPID AND DATEDIFF(DAY, e.HIRE_DATE, s.SALE_DATE) < 30 ) AS SALES_30_DAYS FROM EMPLOYEE e
方案2:LEFT JOIN 关联筛选
如果你更偏好JOIN写法,也可以将时间筛选条件放到关联逻辑中实现:
SELECT e.EMPID, e.EMPNAME, e.HIRE_DATE, NULLIF(COUNT(s.EMPID), 0) AS SALES_30_DAYS FROM EMPLOYEE e LEFT JOIN SALES s ON e.EMPID = s.EMPID AND DATEDIFF(DAY, e.HIRE_DATE, s.SALE_DATE) < 30 GROUP BY e.EMPID, e.EMPNAME, e.HIRE_DATE
两种写法执行结果完全一致,都可以输出你预期的结果:没有入职30天内销量的员工,SALES_30_DAYS字段返回NULL。
内容的提问来源于stack exchange,提问作者Depth of Field
相关产品推荐
相关产品推荐

