2010-06-11 6 views
0

La section de code suivante renvoie plusieurs colonnes pour quelques enregistrements.T-SQL Retour des lignes dupliquées

SELECT a.ClientID,ltrim(rtrim(c.FirstName)) + ' ' +

case when c.MiddleName <> '' then 
ltrim(rtrim(c.MiddleName)) + '. ' 
else '' 
end + 

ltrim(rtrim(c.LastName)) as ClientName, a.MISCode, b.Address, b.City, dbo.ClientGetEnrolledPrograms(CONVERT(int,a.ClientID)) as Abbreviation 
FROM ClientDetail a 
JOIN Address b on(a.PersonID = b.PersonID) 
JOIN Person c on(a.PersonID = c.PersonID) 
LEFT JOIN ProgramEnrollments d on(d.ClientID = a.ClientID and d.Status = 'Enrolled' and d.HistoricalPKID is null) 
LEFT JOIN Program e on(d.ProgramID = e.ProgramID and e.HistoricalPKID is null) 
WHERE a.MichiganWorksData=1 

J'ai isolé la question à la table ProgramEnrollments. Cette table contient des relations un-à-plusieurs dans lesquelles chaque ID client peut être inscrit dans plusieurs programmes. Ainsi, pour chaque programme auquel un client est inscrit, il y a un enregistrement dans le tableau. L'ensemble de résultats final renvoie donc une ligne pour chaque ligne de la table ProgramEnrollments en fonction de ces jointures.

Je suppose que ma jointure est le problème mais je ne vois pas le problème.

Réflexions/Suggestions?

Merci,

Chuck

Répondre

0

La jointure est pas le problème, il fait ce qu'il est censé faire avec un à-plusieurs

Vous pouvez utiliser un GROUP BY sur votre requête, ou bien utilisez une sous-sélection pour renvoyer des valeurs DISTINCT à partir des tables ProgramEnrollments/Program.

Vous ne semblez pas utiliser les données des programmes ProgramEnrollments ou des tables de programmes, ils sont donc nécessaires dans la requête (je suppose qu'ils sont, juste pensé que je poserais la question).

+0

Vous avez raison. Je viens de réaliser que je n'ai plus besoin de ces tables car je les manipule dans la fonction. Merci – cBlaine

0

Vous ne semblez pas utiliser de colonnes dans ProgramEnrollments ou Program, essayez donc de supprimer ces 2 JOINs.

+0

Merci pour la réponse. Grande communauté ici. Je viens de me joindre aujourd'hui. Content de l'avoir fait, je serai de retour! – cBlaine

Questions connexes