sql-server - SQL Server:WHERE 子句中的 ROW_NUMBER() 返回“无效的列名”
问题描述
几天以来,我一直在使用这个免费的开源数据库,它列出了世界上所有的 IP 地址。
我的目标是创建一个可以列出的数据库:
country_code
世间万物- 全世界
city_name
都拍一次 Latitude
和longitude
每个城市desc
上的倒计时命令country_code
我做到了:
SELECT
ROW_NUMBER() OVER (ORDER BY country_code desc,city_name desc) as countdown_order,
AVG(latitude) AS latitude,
AVG(longitude) AS longitude,
city_name,
country_code
FROM ip2location_db11
--where countdown_order < '100'
GROUP BY country_code, city_name
ORDER BY country_code, city_name
当我取消注释where countdown_order < '100'
查询返回我时出现问题
Msg 207, Level 16, State 1, Line 8
Invalid column name 'countdown_order'.
是的,我尝试使用CTE
,但由于ORDER BY
.
我不确定下一步该尝试什么。
解决方案
countdown_order
是列别名。您不能引用同一级别的列别名。
但是,您可以在更高级别执行此操作,例如派生表或 cte
SELECT *
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY country_code desc,
city_name desc) as countdown_order,
AVG(latitude) AS latitude,
AVG(longitude) AS longitude,
city_name,
country_code
FROM ip2location_db11
GROUP BY country_code, city_name
) as D
where countdown_order < 100 -- countdown_order is an integer, remove the single quote
ORDER BY country_code, city_name
推荐阅读
- c# - 此控制台应用程序代码运行一次,然后在我按 Enter 时关闭,但我需要它是连续的,我会改变什么?
- timeout - 等待存储时间长和网关超时 (504)
- parallel-processing - random_number() 如何并行工作?
- c# - 在调用 Wait 之前访问任务上的结果实际上是做什么的?
- redirect - 从 HTTPS 重定向到其他网站的 HTTPS
- shell - 从 shell 脚本调用 ant 命令
- google-drive-api - 使用 Marketplace SDK 集成 G Suite - 永久禁用“Drive UI Integration”
- sql - SQL - 产生一条记录
- r - 将R中的两个数据表粘贴在一起
- dc.js - 交叉过滤器减少正在崩溃