我不會試圖想出一些巧妙的(看起來有點複雜)方式試圖將你的更新塞入你當前的設計,但改變你的表的設計。現在
BEGIN TRAN
CREATE TABLE Games (GameID INT PRIMARY KEY)
CREATE TABLE Players (PlayerID INT PRIMARY KEY)
CREATE TABLE PlayersGames (GameID INT, PlayerID INT, Position INT, conrti INT)
INSERT INTO Games VALUES (1), (2)
INSERT INTO Players VALUES (1), (2), (3), (4), (5)
INSERT INTO PlayersGames VALUES (1,1,1,0), (1,2,2,0), (1,3,3,0), (1,4,4,0), (1,5,5,0), (2,2,1,0), (2,1,2,0), (2,5,3,0), (2,3,4,0), (2,4,5,0)
ROLLBACK TRAN
你UPDATE
可以簡單的
UPDATE PlayersGames SET contri = @YourValue WHERE PlayerID = 4 AND GameID = 1
編輯
對於completenes,整個腳本,包括顯示的結果,按您的問題可能是這樣
BEGIN TRAN
CREATE TABLE dbo.Games (GameID INT PRIMARY KEY)
CREATE TABLE dbo.Players (PlayerID INT PRIMARY KEY)
CREATE TABLE dbo.PlayersGames (GameID INT, PlayerID INT, Position INT, contri INT)
ALTER TABLE dbo.PlayersGames ADD CONSTRAINT FK_PLAYERSGAMES_PLAYERS FOREIGN KEY (PlayerID) REFERENCES dbo.Players(PlayerID)
ALTER TABLE dbo.PlayersGames ADD CONSTRAINT FK_PLAYERSGAMES_GAMES FOREIGN KEY (GameID) REFERENCES dbo.Games(GameID)
INSERT INTO Games VALUES (1), (2)
INSERT INTO Players VALUES (1), (2), (3), (4), (5)
INSERT INTO PlayersGames VALUES (1,1,1,0), (1,2,2,3), (1,3,3,0), (1,4,4,0), (1,5,5,0), (2,2,1,0), (2,1,2,0), (2,5,3,0), (2,3,4,0), (2,4,5,0)
SELECT GameID
, Player1 = MIN(CASE WHEN Position = 1 THEN PlayerID ELSE NULL END)
, Player2 = MIN(CASE WHEN Position = 2 THEN PlayerID ELSE NULL END)
, Player3 = MIN(CASE WHEN Position = 3 THEN PlayerID ELSE NULL END)
, Player4 = MIN(CASE WHEN Position = 4 THEN PlayerID ELSE NULL END)
, Player5 = MIN(CASE WHEN Position = 5 THEN PlayerID ELSE NULL END)
, contri_P1 = MIN(CASE WHEN Position = 1 THEN contri ELSE NULL END)
, contri_P2 = MIN(CASE WHEN Position = 2 THEN contri ELSE NULL END)
, contri_P3 = MIN(CASE WHEN Position = 3 THEN contri ELSE NULL END)
, contri_P4 = MIN(CASE WHEN Position = 4 THEN contri ELSE NULL END)
, contri_P5 = MIN(CASE WHEN Position = 5 THEN contri ELSE NULL END)
FROM PlayersGames
GROUP BY
GameID
ROLLBACK TRAN
您可以在更新中使用CASE表達式。看看http://msdn.microsoft.com/en-us/library/ms181765.aspx。理想的情況下,你不應該讓所有的球員分成五列。最好把這些數據放在一個單獨的表格中。 –
「玩家2」和「玩家5」之間有什麼*邏輯*不同?如果不是,那麼他們就不應該成爲單獨的專欄,我同意@利文的回答。 –