2016-05-29 14 views
1

複数の異なるコースの待ち行列に入れることができます。各コースには、学生との独自のキューがあります。単一の更新クエリを使用してテーブルの乗算値を変更する

テーブルには、次しまっ:は、(int)をStudentID CourseID(int型)、受理(ブール値)とQueueIndex(int型)。それぞれstudentIDは、courseIDごとに異なるQueueIndexとなっています。

生徒が一度、すべてのキューに対してすべてQueueIndexを更新するにはどうすればよいですか。彼がどこに属していたのでしょうか?

など。学生AはAコースでQueueIndex 5とコースBの 6を持っていたコースAの次の学生が代わりにQueueIndex 5などを持っていますので、私はそのQueueIndex上記の他のすべての学生をしたいとCourseID --value減少しますです

UPDATE [Register] 
SET QueueIndex = QueueIndex -1 
WHERE QueueIndex > 0 
AND (decrease QueueIndex for every CourseID where that specific StudentID left the queue); 

これは単一のクエリで可能ですか?

答えて

1

複数のコースに参加している場合、1人の学生のようなサウンドは何度もそこに入りますか?彼らが1つのコースを去った場合...

私は誤植がある場合はごめんなさい。私に知らせて。

1

なぜキューインデックスを更新する必要がありますか?

SELECT StudentID, CourseID, 
    (SELECT Count(StudentID) FROM Register R 
    WHERE R.CourseID = Register.CourseID AND 
    R.QueueIndex <= Register.QueueIndex) AS QueueNr 
FROM Register 

これは関係なく、削除された方の順序であなたのqueueindexを与えないだろう。

1

トリガーを使用すると、DELETE文が発行されたときに更新を実行できます。コードの下にはあなたを助けることがあります。

CREATE TRIGGER tr_Delete_Update_Register ON dbo.Register 
    FOR DELETE 
AS 
    BEGIN 
     UPDATE Register 
     SET  QueueIndex = QueueIndex - 1 
     WHERE QueueIndex > 0 
       AND QueueIndex > (SELECT QueueIndex 
            FROM  deleted 
           ) 
    END   

このトリガーは削除のみQueueIndexより大きいQueueIndexのためのすべてのQueueIndexを更新します。 それ以外の場合、すべてのQueueIndexを更新するには、WHERE句からAND条件をコメントアウトします。

関連する問題