J'ai besoin de trouver les noms des joueurs de l'équipe de football A qui possèdent le même prénom, mais différent nom de famille en tant que joueurs de l'équipe de football B. J'ai besoin de produire les noms complets de tous les joueurs de l'équipe A, pas seulement 'John' . Je suis capable d'utiliser une colonne supplémentaire avec des identifiants de joueurs uniques dans toutes les équipes.
Table essentiellement de la table ressemble à ceci: p> Je peux produire une liste d'équipes avec des noms avec le même prénom en tant que joueurs d'équipe B. P> SELECT firstname, lastname FROM table
4 Réponses :
Vous pouvez utiliser une expression de table commune, puis faire une jointure interne sur le prénom. Dans l'exemple ci-dessous, j'ai divisé les équipes à l'aide de la CTE, puis rejoignant que les équipes ne correspondent pas, le nom de famille ne correspond pas et le prénom correspond au nom.
J'ai ensuite utilisé un syndicat déclaration pour montrer comment le joueur de l'autre équipe peut également être affiché. P>
declare @soccerteam table ( FirstName nvarchar(50), LastName nvarchar(50), Team nvarchar(3) ); insert @soccerteam (FirstName, LastName, Team) values ('John', 'Snow', 'A'), ('Batman', 'Dies', 'B'), ('John', 'Dies', 'B'); select * from @soccerteam; with teamB as (select FirstName, LastName, Team from @soccerteam where Team='B') select 'Players in Team A matching Team B', a.* from @soccerteam a inner join teamB b on a.FirstName=b.FirstName and a.LastName<>b.LastName and a.Team<>b.Team union select 'Players in Team B matching Team A', b.* from @soccerteam a inner join teamB b on a.FirstName=b.FirstName and a.LastName<>b.LastName and a.Team<>b.Team;
Essayez ce qui suit:
select distinct t1.FirstName from ( SELECT firstname, lastname FROM @t where Team = 'A' ) as t1 inner join ( SELECT firstname, lastname FROM @t where Team = 'B' ) as t2 on (t1.FirstName = t2.FirstName) where t1.LastName <> t2.LastName
Cela ne créerait-il pas des doublons du même joueur s'il y avait plus d'un 'John' en équipe B?
@Campioncircle Oui, ce serait. Cela devrait avoir le distinct.
J'aurais dû spécifier, je suis obligé de produire une équipe complète un nom.
@Campioncircle Ce que vous voulez obtenir est le nom des joueurs en équipe A qui sont en équipe B avec le même nom et le même nom de famille?
Oui. J'ai ajouté des identifiants aux joueurs, a changé votre première ligne pour "sélectionner distinct T1.Id" et ci-joint que pour indiquer "Sélectionnez FirstName, nom de famille à partir de la table où id in (...)
Vous pouvez utiliser le code suivant:
;WITH CTE AS ( SELECT * FROM Table WHERE Team = 'A' ),CTE1 AS ( SELECT * FROM Table WHERE Team = 'B' ) SELECT * FROM CTE R1 JOIN CTE1 R2 ON R1.FirstName = R2.FirstName AND R1.LastName <> R2.LastName
aussi simple que:
p>
Dupliqué possible de Sélectionnez des lignes avec la même colonne une colonne différente B
Ces codes ne "produisent évidemment pas" une liste d'équipes un nom avec le même prénom que les joueurs d'équipe B ". Pourquoi dites-vous que ça fait? Votre code renvoie des lignes où le lecteur [prénom] [Nom] est sur une équipe. PS ta dernière phrase n'est pas claire. Utilisez suffisamment de mots, de phrases et de références à des éléments d'exemples pour dire clairement et parfaitement ce que vous voulez dire. PS S'il vous plaît avant de poster regarder la version formatée de votre message sous la zone d'édition. Lisez l'aide de Modifier Re Inline & Block Formats pour le code et les citations. (Cliquez sur 'Édité ...' pour voir comment votre message a été modifié.)