To get values from other tables or columns of the same table but different row, you should use a function:
CREATE TABLE [dbo].[a2]
(
[a1ID] [int] NULL,
[col3] AS (a1ID^2)
)
GO
create function get_a2_col3(@a1id int)
returns int
as
begin
return (select col3 from [dbo].[a2] where a1ID = @a1id)
end
go
CREATE TABLE [dbo].[a3]
(
[a3ID] [int] NULL,
[col4] AS dbo.get_a2_col3(a3ID) --(dbo.a2.col3 - 1)
)
GO
drop table [a2]
drop table [a3]