定义计算列引用另一个表

时间:2012-03-14 05:57:47

标签: sql-server-2008-r2 calculated-columns

我有两个数据库表,团队ID, NAME, CITY, BOSS, TOTALPLAYER)和 播放器ID, NAME, TEAMID, AGE),两个表之间的关系是一对多,一个团队可以有很多玩家。

我想知道有没有办法在TOTALPLAYER表中定义Team列?

例如,如果有10个玩家TEAMID为1,那么Team表中ID为1的行的TOTALPLAYER列的值为10.如果我添加一个播放器,TOTALPLAYER列的值最多为11,我不需要为它显式赋值,让它由数据库生成。有谁知道如何实现它?

提前谢谢。

BTW,数据库是SQL Server 2008 R2

2 个答案:

答案 0 :(得分:9)

是的,你可以这样做 - 你需要一个函数来统计团队的玩家,并在计算列中使用它:

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) 

现在,如果您选择,则每次调用该功能,对于所选的每个团队。该值不会保留在团队表中 - 每次从团队表中进行选择时,都会动态计算该值。

由于它的值没有持久存在,问题实际上是:它是否需要是表上的计算列,或者您是否可以使用存储的函数来计算播放器的数量(如果需要)?

答案 1 :(得分:2)

您不必将总数存储在表格中 - 可以在执行查询时计算,例如:

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"在查询中,这将是每个团队中球员数量的计数(如果有的话)。