SQL Server编写公司条目统计查询时子查询报无效列名如何解决
问题解决方法
报错原因
SQL的执行顺序导致了该问题:SQL的执行优先级为 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。你在SELECT子句中给K.COMPANY定义的别名company_name,是在SELECT阶段才生成的,而子查询的过滤逻辑执行优先级高于SELECT,因此无法识别这个别名。
修复方案
方案1:直接修改原有语句的关联条件
将子查询中引用的外层字段改为原始字段名K.COMPANY即可解决报错,同时可以直接按最新条目日期排序,无需后续在Excel处理:
SELECT /*this is the list of companies with distinct name */ DISTINCT(K.COMPANY) AS company_name, /*where I count entries*/ (SELECT COUNT(KK.COMPANIES) FROM COMPANIES KK WHERE KK.COMPANY = K.COMPANY) AS company_count, /*where I try to get newest entry date*/ (SELECT TOP 1 ENTRY_DATE FROM COMPANIES KKK WHERE KKK.COMPANY = K.COMPANY ORDER BY KKK.ENTRY_DATE DESC) AS company_date FROM COMPANIES K WHERE K.ENTRY_DATE > '20211004 00:00:00' ORDER BY company_date DESC
方案2:更简洁高效的GROUP BY写法
不需要嵌套子查询,性能更优,逻辑更清晰:
注意:以下语句默认统计的是2021-10-04之后录入的条目对应的公司总数、最新录入日期。如果你需要统计该公司全表所有时间的条目总数和最新日期,可将
WHERE条件替换为HAVING MAX(ENTRY_DATE) > '20211004 00:00:00'即可。
SELECT COMPANY AS company_name, COUNT(*) AS company_count, MAX(ENTRY_DATE) AS company_date FROM COMPANIES WHERE ENTRY_DATE > '20211004 00:00:00' GROUP BY COMPANY ORDER BY company_date DESC
内容的提问来源于stack exchange,提问作者baron_bartek
相关产品推荐
相关产品推荐

