不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
为什么SQL Server Select语句中Where不能使用列别名?
编辑:dnawo 日期:2013-05-06
可能有人已经发现,在SQL Server Select语句中Where不能使用列别名,而ORDER BY却可以,例如:
第一条语句执行会出错,提示列名 'UserId' 无效,第二条语句能正常执行。同样的问题在having中也存在:
这是为什么呢?这主要是受Select语句的处理顺序的影响,在SQL Server 2008帮助文档说明如下:
引用内容
由于Where在Select前执行,所以执行Where时列别名还不存在,当然无法使用,而ORDER BY在Select后执行,自然可以使用列别名。处理顺序也解释了为什么表别名在任何地方都可以使用,例如:
复制内容到剪贴板
程序代码

select Id as UserId from [User] where UserId<10000
select Id as UserId from [User] order by UserId desc
select Id as UserId from [User] order by UserId desc
第一条语句执行会出错,提示列名 'UserId' 无效,第二条语句能正常执行。同样的问题在having中也存在:
复制内容到剪贴板
程序代码

select Brand,COUNT(*) as total from [User]
group by Brand having total>1000
order by total desc
group by Brand having total>1000
order by total desc
这是为什么呢?这主要是受Select语句的处理顺序的影响,在SQL Server 2008帮助文档说明如下:

Select语句的处理顺序
1.FROM
2.ON
3.JOIN
4.Where
5.GROUP BY
6.WITH CUBE 或 WITH ROLLUP
7.HAVING
8.Select
9.DISTINCT
10.ORDER BY
11.TOP
1.FROM
2.ON
3.JOIN
4.Where
5.GROUP BY
6.WITH CUBE 或 WITH ROLLUP
7.HAVING
8.Select
9.DISTINCT
10.ORDER BY
11.TOP
由于Where在Select前执行,所以执行Where时列别名还不存在,当然无法使用,而ORDER BY在Select后执行,自然可以使用列别名。处理顺序也解释了为什么表别名在任何地方都可以使用,例如:
复制内容到剪贴板
程序代码

select * from [User] a where a.Id<10000 order by a.Id desc






评论: 0 | 引用: 0 | 查看次数: 4092
发表评论
请登录后再发表评论!