where子句中的列别名给出了无效的列名错误

Acc*_*DBA 2 sql sql-server sql-server-2005

这是一个简单的问题,我已经挂断了.我想知道我是否可以创建列别名然后在我的WHERE子句中使用它,即:

SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER
FROM TABLE
WHERE NUMBER = '4'
Run Code Online (Sandbox Code Playgroud)

请记住,这只是我想要做的一个例子.我正在运行的查询有点复杂,但只是如何创建变量然后在子句中使用它的基本思路.

我的问题是关于where子句中的别名列.我有一个查询在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位数匹配.当我们只有6位数时,查询工作正常,但现在我们有7位,我收到错误,我试图以不同的方式重写查询.

JNK*_*JNK 6

重用别名列是一个很好的用例CROSS APPLY:

SELECT t.TRACTOR, CxA.Num
FROM TABLE t
CROSS APPLY
  (SELECT CONVERT(VARCHAR(10), ORDER)) CxA(Num)
WHERE CxA.Num = '4'
Run Code Online (Sandbox Code Playgroud)

任何一个CROSS APPLY可以在被引用SELECT,WHERE,ORDER BY,等有一些限制(通常,如果你有在聚集CROSS APPLY表达式).