问题描述
|
我无法在IdCell列上创建where子句,但可以执行\“ order by \”。
sql Server对列名称说错误
select
*,(ISNULL(Table_Adresses.IdCellule,Table_Clients.IdCellule)) as IdCell
from Table_Tickets
left join Table_Postes on Table_Postes.IdPoste = Table_Tickets.IdPoste
left join Table_Adresses on Table_Adresses.IdAdresse = Table_Postes.IdAdressePhysique
left join Table_Clients on Table_Clients.IdClient = Table_Tickets.IdClient
where idtypeticket=2 and
isnull(bcloture,0)=0 and
IdCell =4 --problem here
order by IdCell
为什么我不能在IdCell上找到位置?
谢谢
解决方法
您不能以这种方式使用别名列,您需要执行以下操作:
and (ISNULL(Table_Adresses.IdCellule,Table_Clients.IdCellule)) = 4
, 尽管SQL(语言)迫使您以SELECT-FROM-WHERE-ORDER BY
的顺序构造查询,但是(有效地)它以FROM-WHERE-SELECT-ORDER BY
的顺序执行。这就是为什么可以在ORDER BY
子句中使用AS
子句(\“列别名\”)IdCell
而不在WHERE
子句中使用的原因,即IdCell
不在WHERE
子句的范围内,因为它只会在以后出现。
, select
*,(ISNULL(Table_Adresses.IdCellule,Table_Clients.IdCellule)) as IdCell
from Table_Tickets
left join Table_Postes on Table_Postes.IdPoste = Table_Tickets.IdPoste
left join Table_Adresses on Table_Adresses.IdAdresse = Table_Postes.IdAdressePhysique
left join Table_Clients on Table_Clients.IdClient = Table_Tickets.IdClient
where idtypeticket=2 and
isnull(bcloture,0)=0 and
(ISNULL(Table_Adresses.IdCellule,Table_Clients.IdCellule)) =4
order by IdCell
, select
*,Table_Clients.IdCellule)) as IdCell
from Table_Tickets
left join Table_Postes on Table_Postes.IdPoste = Table_Tickets.IdPoste
left join Table_Adresses on Table_Adresses.IdAdresse = Table_Postes.IdAdressePhysique
left join Table_Clients on Table_Clients.IdClient = Table_Tickets.IdClient
where idtypeticket=2 and
bcloture is null and
(ISNULL(Table_Adresses.IdCellule,Table_Clients.IdCellule)) = 4
order by IdCell