2012-03-15 14 views
15

Esta línea de código es un fragmento de mi declaración de selección.Hacer referencia a una columna calculada en la cláusula where SQL

frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) As FreeDaysRemaining 

A continuación se muestra un fragmento de mi cláusula where

and frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) <= @intFreeDays 

La pregunta que tengo es ¿cómo hacer referencia a que la columna de la FreeDaysRemaining y así me puedo comparar con @intFreeDays

Busco para algo como esto

Freedays <= @intFreeDays 

Respuesta

8

Además de la respuesta de Aarón, se puede usar una expresión de tabla común:

;with cte_FreeDaysRemaining as 
    (
     select 
      frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) As FreeDaysRemaining 
      --, more columns 
     from yourtable 
    ) 
    select 
     FreeDaysRemaining 
     --, more columns 
    from cte_FreeDaysRemaining 
    where FreeDaysRemaining <= @intFreeDays 
+0

¿Alguna información sobre por qué esta es la mejor opción? :) –

+0

Ninguna, aparte de mi preferencia personal es usar un CTE en lugar de una tabla derivada. – Joey

21

No puede hacer referencia a una alia s en cualquier parte excepto ORDER BY. Una solución (aparte de la obvia posibilidad de repetir la expresión) es ponerlo en una tabla derivada:

SELECT FreeDaysRemaining --, other columns 
FROM 
(
    SELECT frdFreedays - DATEDIFF(DAY, conReceiptToStock, GETDATE()) AS FreeDaysRemaining 
    --, other columns 
    FROM ... 
) AS x 
WHERE FreeDaysRemaining <= @intFreeDays; 
+0

Este es una locura pensar que no hay otra solución más que esto. Tener una declaración específica para agregar condición en el conjunto de resultados sería simple de crear (creo). Existe el 'HAVING' para la función de agregado, ¿por qué no un' FILTER' para el conjunto de resultados. Ok, esta sería una tercera declaración en una consulta, algo desordenada, pero cuando tienes una columna de seleccionar con 20 para escribir dos veces debido a una condición simple, esto es realmente complicado y un dolor en el culo para mantener. – AxelH

Cuestiones relacionadas