2011-06-15 27 views
1

我无法在IdCell列上创建where子句,但我可以执行“order by”。列名sql isnull()子句,其中

SQL服务器上说,列名

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一个在哪里?

谢谢

回答

0

你不能使用你的别名的列在这种方式,你需要做的:

and (ISNULL(Table_Adresses.IdCellule, Table_Clients.IdCellule)) = 4 
+0

完美谢谢 – Akya 2011-06-15 08:49:40

0
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 
+0

完美谢谢 – Akya 2011-06-15 08:50:15

2

虽然SQL(语言)的部队您构造以SELECT-FROM-WHERE-ORDER BY的顺序查询,它(以有效的方式)以FROM-WHERE-SELECT-ORDER BY的顺序执行。这就是为什么您可以在ORDER BY子句中使用AS子句(“列别名”)IdCell,而不是在WHERE子句中使用,即IdCell不在WHERE子句的范围内,因为它只是在以后才生效。

0
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 
    bcloture is null and 
    (ISNULL(Table_Adresses.IdCellule, Table_Clients.IdCellule)) = 4 
    order by IdCell