sql >> Base de Datos >  >> RDS >> Sqlserver

Hacer referencia a un alias de columna en una cláusula WHERE

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

Normalmente no puede hacer referencia a los alias de campo en WHERE cláusula. (Piense en ello como el SELECT completo incluidos los alias, se aplica después de WHERE cláusula.)

Pero, como se menciona en otras respuestas, puede obligar a SQL a tratar SELECT para ser manejado antes del WHERE cláusula. Esto generalmente se hace con paréntesis para forzar el orden lógico de operación o con una expresión de tabla común (CTE):

Paréntesis/Subselección:

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

O vea la respuesta de Adam para una versión CTE de la misma.