2012-04-24 3 views
0

Je rencontre un problème lors de l'utilisation d'un alias de colonne pour une jointure dans un cte. Invalid column name sur la ligne avec RowNumber2 >= (t1.RowNumber - 20) Quelqu'un at-il une suggestion? Merci ..Erreur "nom de colonne non valide" dans CTE

DECLARE @latestDate Date = dbo.LatestDateWithPricingVolCountOver4k() 

;WITH AllSymbsAndDates AS 
(
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY Symbol ORDER BY TradingDate) AS RowNumber, 
     Symbol, TradingDate 
    FROM tblSymbolsMain 
    CROSS JOIN tblTradingDays 
    WHERE TradingDate <= @latestDate 
), 
SymbsDatesGrouped AS 
(
    SELECT * FROM 
    (
     SELECT 
      t1.Symbol, t1.TradingDate, t2.TradingDate AS TradingDate2, t1.RowNumber, 
      t2.RowNumber AS RowNumber2 
     FROM AllSymbsAndDates t1 
     JOIN AllSymbsAndDates t2 ON t1.Symbol = t2.Symbol 
      AND RowNumber2 >= (t1.RowNumber - 20) 
    ) t 
) 
SELECT 
    Symbol, TradingDate, TradingDate2, RowNumber, RowNumber2 
FROM 
    SymbsDatesGrouped 
ORDER BY 
    Symbol, TradingDate, TradingDate2 

Répondre

0

Vous ne pouvez pas référencer un alias de colonne dans les clauses WHERE ou JOIN - en fait la seule clause où vous pouvez faire référence à un alias dans la liste SELECT est soit dans le ORDER BY (ou dans un champ extérieur , p.ex. sélection dans une sous-requête ou CTE).

Dans ce cas, la solution est plutôt triviale. Pourquoi ne pas simplement dire:

AND t2.RowNumber >= (t1.RowNumber - 20) 

?

+0

Merci. J'étais sous l'impression se référant à la colonne par 2 noms différents dans la même requête ne fonctionnerait pas. Je suis bon à faire. – StatsViaCsh

Questions connexes