列名sql isull子句,其中

问题描述

| 我无法在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