Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Fare riferimento a un alias di colonna in una clausola WHERE

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

Normalmente non puoi fare riferimento agli alias di campo in WHERE clausola. (Pensalo come l'intero SELECT inclusi gli alias, viene applicato dopo il WHERE clausola.)

Ma, come menzionato in altre risposte, puoi forzare SQL a trattare SELECT da gestire prima del WHERE clausola. Questo di solito viene fatto con parentesi per forzare l'ordine logico di operazione o con un'espressione di tabella comune (CTE):

Parentesi/Sottoselezione:

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

Oppure vedi la risposta di Adam per una versione CTE dello stesso.