Comment obtenir des valeurs Distinctes dans la Requête SQL
J'ai un problème dans ma Requête SQL
je veux select DISTINCT StudentGroups(SG), mais la requête me donne une certaine repetations
voici ma Requête
SELECT DISTINCT(SG.SGID), en.EnrollmentID, CR.Name AS Course, INS.Name as Instructor,
S.Session, SG.StartTime, SG.EndTime, EN.CreateDate
FROM StudentGroups SG inner JOIN Enrollments EN ON SG.SGID = EN.SGID
JOIN Courses CR ON SG.CourseID = CR.CourseID
JOIN Class CL ON SG.ClassID = CL.ClassID
JOIN Instructors INS ON SG.InstructorID = INS.InstructorID
JOIN Sessions S ON SG.SessionID = S.SessionID
WHERE EN.SGID NOT IN ( SELECT SGID FROM Enrollments
WHERE StudentID = 45
Mis à JOUR
Cette requête me donne les données suivantes
mais je ne veux pas répété SGID
DISTINCT
est pas une fonction. C'est un operator appliquée à tous colonnes dans la liste de sélection.Œuvres DISTINCTES, sur la ensemble ligne: vous ne pouvez pas obtenir DISTINCTES SGID valeurs dans le même ensemble de résultats avec les autres colonnes. Il ne fait aucun sens...
alors, comment puis-je obtenir des enregistrements uniques?? @a_horse_with_no_name ,@gbn
voir mise à jour de question
Vous devez nous dire comment pour choisir une des lignes. Comment voulez-vous déterminer la ligne qui doit être jeté et la partie que vous voulez conserver? La dernière? Le premier?
OriginalL'auteur Ahmad Abbasi | 2013-02-21
Vous devez vous connecter pour publier un commentaire.
DISTINCT
toujours s'applique à toutes les colonnes retournées. Mettre des parenthèses autour d'une colonne ne fait aucune différence dans son comportement.Si vous voulez que vos résultats ne contiennent que des valeurs uniques de
SG.GID
, vous pouvez utiliser unGROUP BY
clause de la place--mais alors vous devez décider des règles pour les valeurs que vous souhaitez retourner dans les autres colonnes. Vous faites cela en utilisant des fonctions d'agrégation commeMIN()
,MAX()
,COUNT()
,SUM()
, etc. Exemple simplifié:Lors de la jointure de plusieurs tables dans la requête initiale, vous devez être prudent lors de la comptabilisation et en additionnant les choses, comme des doublons de la jointure peut vous donner des résultats incorrects.
Une autre option serait d'utiliser
ROW_NUMBER()
à retourner une ligne pour chaqueSGID
:Cette numéros de lignes pour chaque
SGID
, en commençant à 1 et triées par ordre de valeur deSG.START_TIME
. Il sera de retour la une ligne de la première heure de début pour chaqueSGID
. Si plusieurs lignes ont la même heure de départ, cela permet de sélectionner l'un de ceux, plus ou moins au hasard. Vous pouvez ajouter d'autres champs à laORDER BY
clause afin de mieux définir les lignes retournées.OriginalL'auteur
Veuillez utiliser la clause GROUP BY quand DISTINCTES n'est pas de travailler pour votre sortie désirée.
OriginalL'auteur Geek