You cannot select a computed column and then use it in a join. You can use a CTE that I am not familiar with, or you can have tables select this way:
SELECT P.Date, (AVG(AvgPrice) - C.PriceY) / C.PriceY as PriceChange, P.Symbol, P.dayrank_Today FROM (SELECT TOP 11 ComCode, Date, AVG(SettlementPri) as AvgPrice, Symbol, (RANK() OVER (ORDER BY Date desc)) as dayrank_Today FROM OTE WHERE ComCode = 'C-') P JOIN (SELECT TOP 11 C.Date, AVG(SettlementPri) as PriceY, (RANK() OVER (ORDER BY C.Date desc))+1 as dayrank_Yest FROM OTE C WHERE C.ComCode = 'C-' GROUP BY c.Date) C ON dayrank_Today = C.dayrank_Yest GROUP BY P.Symbol, P.Date
SELECT P.Date, (AVG(AvgPrice) - C.PriceY) / C.PriceY as PriceChange, P.Symbol, P.dayrank_Today FROM (SELECT TOP 11 ComCode, Date, AVG(SettlementPri) as AvgPrice, Symbol, (RANK() OVER (ORDER BY Date desc)) as dayrank_Today FROM OTE WHERE ComCode = 'C-') P JOIN (SELECT TOP 11 C.Date, AVG(SettlementPri) as PriceY, (RANK() OVER (ORDER BY C.Date desc))+1 as dayrank_Yest FROM OTE C WHERE C.ComCode = 'C-' GROUP BY c.Date) C ON dayrank_Today = C.dayrank_Yest GROUP BY P.Symbol, P.Date
source share