SQL Aide: Sélectionnez déclaration de Concaténer une relation Un-à-Plusieurs
Par exemple, j'ai deux tables. Le premier tableau est étudiant au cours de la deuxième table sont les cours que l'étudiant est en train de prendre. Comment puis-je utiliser une instruction select afin que je puisse voir les deux colonnes de l'étudiant et de cours, de sorte que les cours sont séparés par des virgules.
Grâce.
Vous devez vous connecter pour publier un commentaire.
En supposant que vous êtes à l'aide de SQL Server 2005:
Ceci devrait faire ce que vous êtes après - évidemment remplacer les champs que vous avez besoin:
À des fins de démonstration, d'envisager la suite de deux structures de la table:
Maintenant cette requête doit faire le travail que vous êtes après:
Plus simple qu'actuellement accepté de répondre...
Cela dépend du serveur que vous utilisez. SQL Server? MySQL? Les autres?
Généralement, ce que vous êtes en train de parler d'une jointure:
Cependant, qui vous donnera une ligne par cours. SQL n'est pas facile d'obtenir de l'ensemble des cours qu'une liste délimitée par des virgules dans une seule ligne (ce n'est pas un ensemble de base de fonctionnement). Selon le vendeur, il y a différentes façons de le faire, impliquant la mise en boucle.
Je pense que c'MySQL page va vous aider avec ça.
http://dev.mysql.com/doc/refman/4.1/en/group-by-modifiers.html
Vous pouvez utiliser un fichier UDF que les curseurs à travers les enregistrements liés et concats une chaîne de retour ensemble, mais ce sera cher - si vous lui donner un aller, assurez-vous que votre curseur est READ_ONLY FAST_FORWARD
Êtes-vous à l'aide de 2005 ou 2008? Si oui, alors la recherche de l'PIVOT du système comand. Elle devrait être plus efficace qu'une fonction avec un curseur.
Si vous voulez voir:
Oui, séparés par des virgules est toujours souhaitable, mais SQL n'est pas bon dans ce domaine. Voici l'approche que j'ai toujours été l'intention de l'utiliser:
Créer une Fonction sur le serveur SQL server qui utilise un curseur à boucle sur la sous-requête (désolé, je n'ai pas bien tester ce):
Puis appeler la fonction de la requête: