0

cteの結合に列エイリアスを使用する際に問題が発生しました。Invalid column name誰かとのラインでRowNumber2 >= (t1.RowNumber - 20)提案がありますか?ありがとう..

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
4

1 に答える 1

0

WHEREor句で列エイリアスを参照することはできませんJOIN。実際には、SELECT リストからエイリアスを参照できる唯一の句はORDER BY、サブクエリや CTE からの選択など、外部スコープ内にあります。

この場合、解決策は非常に簡単です。なぜ言わないのですか:

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

?

于 2012-04-24T20:36:24.627 に答える