Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Fazendo referência a um alias de coluna em uma cláusula WHERE

SELECT
   logcount, logUserID, maxlogtm,
   DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)

Normalmente você não pode se referir a aliases de campo no WHERE cláusula. (Pense nisso como todo o SELECT incluindo aliases, é aplicado após o WHERE cláusula.)

Mas, como mencionado em outras respostas, você pode forçar o SQL a tratar SELECT para ser tratado antes do WHERE cláusula. Isso geralmente é feito entre parênteses para forçar a ordem lógica de operação ou com uma expressão de tabela comum (CTE):

Parênteses/Subseleção:
SELECT
   *
FROM
(
   SELECT
      logcount, logUserID, maxlogtm,
      DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
   FROM statslogsummary   
) as innerTable
WHERE daysdiff > 120

Ou veja a resposta de Adam para uma versão CTE do mesmo.