2012-03-14 10 views
6

tanımlamak, iki tablo arasındaki ilişki birçok, bir takım birçok oyuncuyu olabilir biridir.İki veritabanı tabloları, <strong>Takım</strong> (<code>ID, NAME, CITY, BOSS, TOTALPLAYER</code>) ve <strong>Oyuncu</strong> (<code>ID, NAME, TEAMID, AGE</code>) sahip bir hesaplanan sütun başvurusunu başka tablo

TOTALPLAYER sütununda Team tablosunda hesaplandığı şekilde tanımlamanın bir yolu olduğunu bilmek ister misiniz? 10 oyuncu TEAMID, 1'dir varsa

Örneğin, ardından ID Ben bir oyuncu eklerseniz 1 10 bir değere sahip TOTALPLAYER sütunu sahiptir Team tabloda satır, TOTALPLAYER sütunun değeri kadar çıkıyor 11, ona açık bir şekilde değer vermemeye ihtiyacım var, veri tabanı tarafından oluşturulsun. Bunu nasıl anlayacağını bilen var mı?

Önceden Thx.

BTW, veritabanı, SQL Server 2008 R2

+0

İsteğe bağlı bir sorgudaki değerin hesaplanmasında sorun nedir? –

cevap

9

Evet, sen bunu yapabilir - Eğer takımın oyuncuları saymak ve bilgisayarlı sütunda kullanan bir işlev gerekir:

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 

ve sonra hesaplanan sütun tanımlamak: seçtiğiniz Şimdi eğer

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

, o işlev her takım seçildiği için, her seferinde deniliyor. Team tablosunda değer kalıcı değil - Team tablosundan her seferinde seçildiğinde anında hesaplanır. o değer değil kalıcıdır olduğundan beri

, soru gerçekten edilir: Tabloda üzerinde hesaplanan sütun olması gerekiyor mu, yoksa sadece gerekirse, oyuncu sayısını hesaplamak için saklanan işlevi kullanabilir?

+0

Bir takımı sorguladığımda işlevin her zaman çalışacağı anlamına mı geliyor? – James

+2

@ HeroIverson3: yes - her SELECT üzerinde, bu sütunu içeren tabloya (her SELECT * FROM Team için dahil) –

+0

uygulanacak başka bir yol var mı? Bir oyuncu eklediğimde veya sildiğimde sütunun yalnızca güncellenmesini istiyorum. Bir takımı sorguladığımda, yalnızca işlev diğer tablolarda olduğu gibi, işlev yürütmeden. Şimdiden teşekkürler! – James

2

Tabloda toplam saklamak gerekmez - bir sorgu yaptığınızda, gibi bir şey hesaplanabilir:

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

Bu sorguda ek sütun "NUM_PLAYERS" yaratacak Varsa, her takımdaki oyuncuların sayısı sayılacaktır.

+2

temelde evet, ancak bu SQL Server'da derlenmez çünkü GROUP BY sütun listesi, SELECT deyiminde başvurulan tüm toplanmamış sütunları içermelidir. –

İlgili konular