Sql where子句中的列别名给出无效列名错误
这是一个简单的问题,我挂断了。我想知道是否可以创建列别名,然后在我的Sql where子句中的列别名给出无效列名错误,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,这是一个简单的问题,我挂断了。我想知道是否可以创建列别名,然后在我的WHERE子句中使用它,即: SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER FROM TABLE WHERE NUMBER = '4' 请记住,这只是我尝试做的一个例子。我正在运行的查询有点复杂,但只是关于如何创建变量然后在子句中使用它的基本思想 我的问题是关于where子句中的别名列。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们
WHERE
子句中使用它,即:
SELECT TRACTOR, CONVERT(VARCHAR, ORDER) AS NUMBER
FROM TABLE
WHERE NUMBER = '4'
请记住,这只是我尝试做的一个例子。我正在运行的查询有点复杂,但只是关于如何创建变量然后在子句中使用它的基本思想
我的问题是关于where子句中的别名列。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们只有6位数字时,查询工作正常,但现在我们有7位数字,我遇到了一个错误,我正在尝试以不同的方式重写查询。看一下:
变量的基本语法如下所示:
declare @id int
select @id = 1
select *
from myTable
where id = @id
编辑:如果您实际上是在where子句中询问列别名,而不是sql变量,请查看以下问题:
EDITx2:
对于您的特定情况(假设询问列别名),您可以执行以下操作:
SELECT *
FROM (
SELECT TRACTOR, CONVERT(VARCHAR(100), ORDER) AS NUMBER
FROM TABLE
) someTableAlias
WHERE NUMBER = '4'
虽然你可能想重新考虑你的列名。。。我认为数字和顺序都是保留字,应该尽可能避免使用。我相信,您可以通过使用[order]和[number]来解决这些问题,但最好还是避免将保留字作为列/表/其他内容。重新使用别名列是交叉应用的一个很好的用例:
SELECT t.TRACTOR, CxA.Num
FROM TABLE t
CROSS APPLY
(SELECT CONVERT(VARCHAR(10), ORDER)) CxA(Num)
WHERE CxA.Num = '4'
交叉应用
中的任何内容都可以在选择
、其中
、按
排序等中引用,但有一些限制(通常,如果在交叉应用
表达式中有聚合)。对于初学者,请停止使用类似的延迟声明。接下来,您不能在WHERE
子句中引用别名。最后,如果订单是数字,为什么要使用字符串?对不起,我刚才只是快速进行一般查询。另外,顺序实际上是一个字符串,例如:1234567A或1234567A。你真的在问变量吗?或者您想了解更多关于where子句中的别名列的信息?where子句中的别名列更多。我有一个查询,它在一个数据库中查找发票号,并将其与另一个数据库中字段的前7位匹配。当我们只有6位数字时,查询工作正常,但现在我们有7位数字,我遇到了一个错误,我正试图以不同的方式重写查询。这正是我所需要的。感谢Kritner.+1能够看穿OP节目的秘密。