Имя столбца sql isnull () предложение где - PullRequest
1 голос
/ 15 июня 2011

Я не могу сделать предложение where для столбца IdCell, но могу выполнить «заказ по».

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?

Спасибо

Ответы [ 4 ]

2 голосов
/ 15 июня 2011

Хотя SQL (язык) вынуждает вас структурировать ваши запросы в порядке SELECT-FROM-WHERE-ORDER BY, он (эффективно) выполняется в порядке FROM-WHERE-SELECT-ORDER BY. Вот почему вы можете использовать ваше предложение AS ("псевдоним столбца") IdCell в предложении ORDER BY, но не в предложении WHERE, т. Е. IdCell не входит в область действия предложения WHERE, поскольку оно только появляется позже.

0 голосов
/ 15 июня 2011
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
0 голосов
/ 15 июня 2011
   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 голосов
/ 15 июня 2011

Вы не можете использовать свой столбец с псевдонимами таким образом, вам нужно сделать:

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