J'ai de la difficulté à faire ce qui suit:
select a.FirstName, a.LastName, v.District
from AddTbl a order by Firstname
inner join (select distinct LastName from
ValTbl v where a.LastName = v.LastName)
Je veux faire une jointure sur ValTbl mais uniquement pour des valeurs distinctes.
Essaye ça:
select distinct a.FirstName, a.LastName, v.District
from AddTbl a
inner join ValTbl v
on a.LastName = v.LastName
order by a.FirstName;
Ou ceci (cela fait la même chose, mais la syntaxe est différente):
select distinct a.FirstName, a.LastName, v.District
from AddTbl a, ValTbl v
where a.LastName = v.LastName
order by a.FirstName;
Nate , je pense que vous avez bien fourni le bon début pour la bonne réponse, juste dans votre question (vous avez juste besoin de la bonne syntaxe). J'ai eu exactement le même problème, et mettre DISTINCT dans une sous-requête était en effet moins coûteux que ce que d'autres réponses proposées ici ont proposé.
select a.FirstName, a.LastName, v.District
from AddTbl a
inner join (select distinct LastName, District
from ValTbl) v
on a.LastName = v.LastName
order by Firstname
Ce n'est pas la même chose de faire une sélection distincte au début car vous gaspillez toutes les lignes calculées du résultat.
select a.FirstName, a.LastName, v.District
from AddTbl a order by Firstname
natural join (select distinct LastName from
ValTbl v where a.LastName = v.LastName)
essayez ça.
ajouter "distinct" après "select".
select distinct a.FirstName, a.LastName, v.District , v.LastName
from AddTbl a
inner join ValTbl v where a.LastName = v.LastName order by Firstname
Vous pouvez utiliser CTE pour obtenir les valeurs distinctes de la deuxième table, puis l'associer à la première table. Vous devez également obtenir les valeurs distinctes basées sur la colonne LastName. Vous faites cela avec un Row_Number () partitionné par LastName et trié par FirstName.
Voici le code
;WITH SecondTableWithDistinctLastName AS
(
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY LastName ORDER BY FirstName) AS [Rank]
FROM AddTbl
)
AS tableWithRank
WHERE tableWithRank.[Rank] = 1
)
SELECT a.FirstName, a.LastName, S.District
FROM SecondTableWithDistinctLastName AS S
INNER JOIN AddTbl AS a
ON a.LastName = S.LastName
ORDER BY a.FirstName
sélectionnez distinct a.FirstName, a.LastName, v.District from AddTbl a jointure interne ValTbl v sur a.LastName = v.LastName ordonné par a.FirstName;
j'espère que cela t'aides