2012-04-24 62 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