2011-06-15 24 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