SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
yo obtengo
"nombre de columna inválido daysdiff".
Maxlogtm es un campo de fecha y hora. Son las pequeñas cosas que me vuelven loco.
sql
sql-server
tsql
sql-server-2005
usuario990016
fuente
fuente

`daysdiff`.Respuestas:
Normalmente no puede hacer referencia a los alias de campo en la
WHEREcláusula. (Piense en ello como todo elSELECTalias incluido, se aplica después de laWHEREcláusula).Pero, como se menciona en otras respuestas, puede forzar el tratamiento de SQL para
SELECTque se maneje antes de laWHEREclá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:
O vea la respuesta de Adam para una versión CTE de la misma.
fuente
HAVINGrespuesta no funciona en la mayoría de los entornos SQL, incluido MS-SQL sobre el que trata esta pregunta. (En T-SQL,HAVINGrequiere una función agregada.)Si desea utilizar el alias en su
WHEREcláusula, debe ajustarlo en una sub selección, o CTE :fuente
La forma más efectiva de hacerlo sin repetir su código es usar HAVING en lugar de WHERE
fuente
HAVINGalias no es estándar (aunque funciona en MySQL). Específicamente, creo que no funciona con SQL Server.[S0001][207] Invalid column name 'daysdiff'[S0001][8121] Column 'day' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.Si no desea enumerar todas sus columnas en CTE, otra forma de hacerlo sería usar
outer apply:fuente
¿Qué tal usar una subconsulta (esto funcionó para mí en Mysql)?
fuente
HABER funciona en MySQL de acuerdo con la documentación:
fuente
Puede hacer referencia al alias de columna, pero debe definirlo usando
CROSS/OUTER APPLY:DBFiddle Demo
Pros:
WHERE/GROUP BY/ORDER BYfuente
sql-serveryt-sql:)Vine aquí buscando algo similar a eso, pero con un caso cuando, y terminó usando el dónde de esta manera:
WHERE (CASE WHEN COLUMN1=COLUMN2 THEN '1' ELSE '0' END) = 0tal vez se podría utilizarDATEDIFFen elWHEREdirectamente. Algo como:fuente