1
votes

Directeur SQL Select de nombreux employés

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

entrez la description de l'image ici


2 commentaires

Montrez votre sortie attendue.


@dfundako est là dans l'exemple que j'ai mis


3 Réponses :


0
votes

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';


0 commentaires

2
votes

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


0 commentaires

1
votes

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 >


4 commentaires

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