2010-12-13 39 views
0

Ceci est mon instruction select:sortie Format dans SQL de sorte que plusieurs valeurs de la colonne b sont associées à une valeur de la colonne une

SELECT lastName + ',' + firstName as Name, 
     classNumber 
FROM STUDENT 
RIGHT JOIN ENROLL ON Enroll.stuid = Student.stuid 

et la sortie:

name   classnumber 
-------------------------- 
Smith,Tom  ART103A 
Smith,Tom  HST205A 
Chin,Ann  ART103A 
Chin,Ann  CSC201A 
Chin,Ann  MTH103A 
McCarthy,Owen ART103A 
McCarthy,Owen MTH103C 
Rivera,Jane CSC201A 
Rivera,Jane MTH101B 

Je voudrais que ce de sorte que chaque nom n'apparaisse qu'une seule fois dans la première colonne. Toute aide ou idée grandement appréciée.

+1

Quelle version de SQL (MS, Mon, etc.)? Et il n'y a pas de balises [code] ', mais il y a un bouton dans le formulaire de question que vous pouvez utiliser après avoir sélectionné le texte. ;-) - TY OMG Ponies & Michael pour l'édition. –

+0

J'utilise SQL Server 2008 désolé à ce sujet a oublié de mettre cette partie là-bas. – Mike

+0

Vous ne pouvez pas faire de groupe sur le côté sql, mais vous pouvez effectuer cette opération sur votre interface comme DataGrid en utilisant la colonne Groupe –

Répondre

0

Comme les lignes sont toutes indépendantes les unes des autres, aucune ligne ne peut savoir si c'est la première.

Ce que vous pouvez faire est de GROUP BY Nom et mettre tous les classNumbers ensemble dans une liste comme ceci:

SELECT lastName + ',' + firstName AS Name, 
     GROUP_CONCAT(classNumber SEPARATOR '\n') AS classNumbers 
FROM student 
RIGHT JOIN Enroll ON (Student.stuid = Enroll.stuid) 
GROUP BY Name 
+0

'GROUP_CONCAT' est MySQL seulement - l'OP clarifié, ils utilisent SQL Server. –

+0

Ensuite, je vais garder ma réponse et en plus fournir ces deux liens. ;) http://explainextended.com/2010/06/21/group_concat-in-sql-server/ et http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms -sql-server-2005 – AndreKR

0

si une seule classe apparaît.

SELECT lastName + ',' + firstName as Name, classNumber 
FROM STUDENT 
RIGHT JOIN 
(select Student.stuid as stuid, min(classNumber) as ClassNumber 
from ENROLL Enroll inner Join Student 
ON (Student.stuid = Enroll.stuid) group by Student.stuid) AS NewEnrol 
ON NewEnroll.stuid = Student.stuid 

Ou

SELECT lastName + ',' + firstName as Name,Min(classNumber) 
FROM STUDENT 
RIGHT JOIN ENROLL ON Enroll.stuid = Student.stuid 
Group By lastname+','+firstname 
+0

Je vous remercie tous pour les réponses rapides. Je cherche la sortie pour ressembler exactement à ce qu'il fait dans l'op mais les noms en double sont partis afin de se débarrasser de la confusion que c'est deux personnes avec le même nom c'est une personne qui prend plusieurs classes – Mike