3 回答

TA貢獻1821條經驗 獲得超6個贊
計算列不能引用其他表的列,但是可以通過函數來實現,先建立下面這個函數:
create function DingXue(@id int)
??? returns int
as
begin
??? declare @sum int
??? select @sum=sum(num) from b where?id=@id
??? return @sum
end
然后創建表:
create table A(Id int identity(1,1), Num as dbo.DingXue(Id), tt int)
create table B(Id int identity(1,1), ParentId int, Num int)
測試如下:
insert into A(tt) values(1)
insert into B(ParentId,Num) values(1,1234)
insert into B(ParentId,Num) values(1,4321)
select * from A
select * from B
=================
A表里的tt只是為了增加A表里的記錄 :)
======================
其實我一直覺得數據庫里沒有必要存放計算列,因為“計算”這種事情,讓程序來做會更簡單,非要數據庫來做,也可以直接使用 select a.id, sum(b.num) as num from a inner join b on a.id=b.parentid 這種方式來實現
另外,也可以在B表加觸發器來實現,介理相對于函數來說,我對觸發器的抵觸情緒更嚴重一些,呵呵,所以這里提供函數方式的實現

TA貢獻1865條經驗 獲得超7個贊
update num =d.total from c inner join (select a.aid, sum(b.num) as total from a inner join b on a.aid=b.aid group by a.aid) d on c.id = d.id
添加回答
舉報