Comment returnner plusieurs résultats dans une sous-requête?

J'ai une table de visitor qui ressemble à ceci:

 VID Name Address DOB 001 Bob 101 St 03/05/2001 002 James 505 Rd 02/06/1985 003 Jill 201 Place 04/06/1970 

Et une table des visits qui ressemble à ceci:

 VID Date Reason 001 05/07/2012 Family 001 06/01/2012 Family 003 03/02/2011 Other 

Je veux faire une requête de jointure entre ces deux sur VID (que j'ai déjà fait) mais aussi avoir la requête montrer tous (multiples) les résultats des visites. Donc, les résultats ressembleraient à:

 Name DOB Visits Bob 03/05/2001 05/07/2012 Family, 06/01/2012 Family James 02/06/1985 Jill 04/06/1970 03/02/2011 Other 

Est-ce possible? J'ai tenté une sous-requête comme:

SELECT Nom, date de naissance, (SELECT date, Reason FROM visites AS H WHERE H.VID = visitor.VID) En tant que visites FROM visiteur;

Mais cela m'a donné la sous- Subquery returned more than 1 value évidente Subquery returned more than 1 value erreur de Subquery returned more than 1 value . Les données seraient analysées par PHP, mais j'espérais accomplir cela en une seule requête.

Vous pouvez utiliser une construction FOR XML PATH pour concaténer vos résultats dans une colonne

 SELECT Name , DOB , STUFF((SELECT ', ' + CONVERT(VARCHAR(16), H.Date, 101) + ' ' + H.Reason FROM visits AS H WHERE H.VID = visitor.VID FOR XML PATH('')), 1, 2, '') FROM visitor; 

Notez que différents formats de date sont supportés avec convert. J'ai utilisé 101 dans l'exemple qui se traduit par mm/dd/yyyy .

Jetez un oeil à MSDN pour tous les styles pris en charge par convertir.

Vous devrez join les deux tables et ensuite faire le traitement en php. Alors

SELECT a.Nom, a.DOB, b.Date, b.Raison FROM visiteur a, visites b où a.VID = b.VID command par 1,2;

Ensuite, il vous suffit de parcourir les loggings et de commencer une nouvelle ligne chaque fois que l'une des deux premières colonnes change.