Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Référence à un alias de colonne dans une clause WHERE

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

Normalement, vous ne pouvez pas faire référence aux alias de champ dans WHERE clause. (Considérez-le comme l'ensemble SELECT y compris les alias, est appliqué après le WHERE clause.)

Mais, comme mentionné dans d'autres réponses, vous pouvez forcer SQL à traiter SELECT à traiter avant le WHERE clause. Cela se fait généralement avec des parenthèses pour forcer l'ordre logique des opérations ou avec une expression de table commune (CTE) :

Parenthèse/sous-sélection :

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

Ou voir la réponse d'Adam pour une version CTE de la même chose.