2012-04-24 79 views
0

我在cte中使用列别名进行连接时遇到问题。 Invalid column name就行RowNumber2 >= (t1.RowNumber - 20)任何人有一个建议?谢谢..错误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 

回答

0

不能引用列别名在WHEREJOIN条款 - 实际上,你可以选择列表中引用的别名唯一的子句是无论是在ORDER BY(或在外部范围例如从子查询或CTE中选择)。

在这种情况下,解决方案非常简单。为什么不直接说:

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

+0

谢谢。我在这个印象中引用了同一个查询中的2个不同名字的列是行不通的。我很好走。 – StatsViaCsh 2012-04-24 21:12:54