J'ai une table avec teamID qui est l'ID d'une équipe, et les USERID sont les membres de cette équipe. Et puis j'ai un USERID qui est Coordinateur. Mon problème maintenant est de savoir comment faire une requête pour donner le nom du coordinateur par utilisateur.
userID | coordinator 19 | 69 4 | 69
3 Réponses :
Vous devez donc d'abord trouver l'ID d'équipe de l'utilisateur dont vous souhaitez trouver le coordinateur. Utilisez cet ID d'équipe pour rechercher toutes les entrées de votre table avec UserId, TeamId et isCoordinator. Et une condition "isCoordinator is true" pour obtenir uniquement le coordinateur de l'équipe.
SELECT UserId, name
FROM teamTable
WHERE TeamID in (
SELECT TeamID
FROM usersTable
WHERE UserID = IdOfTheUserInQuestion
) AND IsCoordinator = 'true';
J'utiliserais une expression de table commune (CTE):
;WITH Coordinators AS (SELECT TeamID, UserID FROM dbo.Teams WHERE IsCoordinator = 1) SELECT t.UserID, c.UserID as CoordinatorID FROM dbo.Teams t INNER JOIN Coordinators c ON t.TeamID = c.TeamID WHERE t.IsCoordinator = 0
Avec une jointure de la table à la requête des coordinateurs:
select t.userid, c.userid coordinator from tablename t inner join ( select * from tablename where iscoordinator = 'True' ) c on c.teamid = t.teamid
La conception que vous présentez peut avoir pour un utilisateur plusieurs coordinateurs puisque chaque utilisateur peut appartenir à plusieurs équipes. p >
Cela fonctionne à :), sauf que le 69 est inclus dans les deux colonnes.
Y a-t-il un cas où un utilisateur dans une équipe peut être coordinateur dans une autre équipe?
Oui, cela peut arriver @forpas
Et bien sûr, le coordinateur de l'équipe est également un utilisateur de cette équipe. Si vous souhaitez exclure ce dernier cas, ajoutez: où t.userid <> c.userid
Montrez votre sortie attendue.
@dfundako est là dans l'exemple que j'ai mis