定义计算列引用另一个表

问题描述:

我有两个数据库表,ID, NAME, CITY, BOSS, TOTALPLAYER)和 球员ID, NAME, TEAMID, AGE),这两个表之间的关系是一对多的,一个团队可以有很多的球员。定义计算列引用另一个表

我想知道有没有办法在Team表中定义一个TOTALPLAYER列作为计算?

例如,如果有10名球员的TEAMID为1,则在Team表,ID是1具有TOTALPLAYER柱,以10的值。如果我添加一个球员排,TOTALPLAYER列的值上升到11,我不需要为它明确赋值,让它由数据库生成。任何人都知道如何实现它?

Thx提前。

顺便说一句,该数据库是SQL Server 2008 R2的

+0

根据需求计算查询中的值有什么问题? – 2012-03-14 06:07:09

是的,你可以做到这一点 - 你需要一个函数来计算为球队的球员,并使用在计算列:

CREATE FUNCTION dbo.CountPlayers (@TeamID INT) 
RETURNS INT 
AS BEGIN 
    DECLARE @PlayerCount INT 

    SELECT @PlayerCount = COUNT(*) FROM dbo.Player WHERE TeamID = @TeamID 

    RETURN @PlayerCount 
END 

,然后定义计算列:

ALTER TABLE dbo.Team 
ADD TotalPlayers AS dbo.CountPlayers(ID) 

现在,如果你选择,该函数被调用每一次,对于被选择的每个团队。该值不会在队伍表中保留 - 每次从队队列表中选择时,该值都会随时计算。

因为它的价值不是持久的,所以问题的确是:它是否需要是表格上的计算列,或者如果需要,是否可以使用存储函数计算玩家人数?

+0

你的意思是说,当我查询一个团队时,这个功能会每次执行吗? – James 2012-03-14 06:12:11

+2

@ HeroIverson3:是的 - 它会在每个SELECT上执行到包含该列的表(包括每个'SELECT * FROM Team') – 2012-03-14 06:13:19

+0

还有其他方法可以实现吗?我想在添加或删除播放器时只更新列。当我查询一个团队时,只能像查询其他表一样,没有函数执行。提前致谢! – James 2012-03-14 06:23:03

您不必总存储在表 - 它可以计算当你做一个查询,像这样:

SELECT teams.*, COUNT(players.id) AS num_players 
FROM teams LEFT JOIN players ON teams.id = players.team_id 
GROUP BY teams.id; 

这将在查询中创建额外的列“NUM_PLAYERS” ,这将是每支球队的球员数量(如果有的话)。

+2

基本上可以,但是这不会在SQL Server中编译,因为GROUP BY列列表必须包含SELECT子句中引用的所有非聚合列。 – 2012-03-14 08:33:18