3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
計(jì)算列不能引用其他表的列,但是可以通過函數(shù)來實(shí)現(xiàn),先建立下面這個(gè)函數(shù):
create function DingXue(@id int)
??? returns int
as
begin
??? declare @sum int
??? select @sum=sum(num) from b where?id=@id
??? return @sum
end
然后創(chuàng)建表:
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表里的記錄 :)
======================
其實(shí)我一直覺得數(shù)據(jù)庫里沒有必要存放計(jì)算列,因?yàn)椤坝?jì)算”這種事情,讓程序來做會更簡單,非要數(shù)據(jù)庫來做,也可以直接使用 select a.id, sum(b.num) as num from a inner join b on a.id=b.parentid 這種方式來實(shí)現(xiàn)
另外,也可以在B表加觸發(fā)器來實(shí)現(xiàn),介理相對于函數(shù)來說,我對觸發(fā)器的抵觸情緒更嚴(yán)重一些,呵呵,所以這里提供函數(shù)方式的實(shí)現(xiàn)

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
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
添加回答
舉報(bào)