2011-04-05 5 views
2

J'écris une page Web qui affiche les notes des étudiants dans un ancien format de livre de grade, c'est-à-dire, il affiche le nom de l'étudiant, puis leur score pour chaque affectation) répète ensuite une rangée par élève. Mes tableaux sont mis en place comme suit (raccourci aux informations nécessaires):Sybase SQL Dynamic Select (Jointures?) Base de données relationnelle

Tableau: Affectation
* Assignment_PK (clé primaire)
* Assignment_Name

Tableau: Étudiant
* Student_PK (clé primaire)
* nom_etudiant

Tableau: StudentAssignment
* SA_PK (clé primaire
* Student_FK (Student.Student_P K)
* Assignment_FK (Assignment.Assignment_PK)
* Le score

Je suis en train d'écrire une instruction SELECT qui imprimera le nom des élèves et le score pour chaque mission. Le problème que je rencontre est que si je sélectionne Score en tant que colonne, je n'obtiens le score que pour une assignation, car dans mon WHERE, Assignment_FK = Assignment_PK ne me permet que de choisir un Score pour une colonne. Je suis assez nouveau pour les bases de données relationnelles et je pourrais vraiment utiliser de l'aide sur la meilleure façon de résoudre ce problème. Une suggestion a été que j'écris une instruction SELECT pour sélectionner tous les étudiants dans une table, puis faire une ligne foreach dans la table et lui faire sélectionner les scores et les placer dans la colonne appropriée. Cela semble être un processus lent et inutile. Existe-t-il un moyen plus simple d'utiliser JOINS? Ou écrire un meilleur SELECT?

+0

rechercher des tables PIVOT. c'est beaucoup plus facile si vous connaissez le nombre d'affectations à l'avance ... (ce qui est une grande FI). – Randy

+0

Une table PIVOT était exactement ce dont j'avais besoin. Je peux faire une requête initiale pour obtenir le nombre d'affectations à l'avance. Sybase ne possède pas la fonction PIVOT ou TRANSFORM intégrée. Au lieu de cela, j'ai dû charger toutes mes données et ensuite écrire un objet C# pour lire dans les données, les transformer et les afficher dans le format que je voulais. Une table PIVOT aurait parfaitement fonctionné, si Sybase l'a soutenu. – Genzume

Répondre

1

Ceci devrait vous permettre d'obtenir les données dont vous avez besoin. Vous pouvez ensuite étudier le pivotement dans le format d'affichage souhaité, ce qui peut être être plus facile dans votre application que dans la base de données.

SELECT s.Student_Name, a.Assignment_Name, sa.Score 
    FROM Student s 
     INNER JOIN StudentAssignment sa 
      ON s.Student_PK = sa.Student_FK 
     INNER JOIN Assignment a 
      ON sa.Assignment_FK = a.Assignment_PK 
    ORDER BY s.Student_Name, a.Assignment_Name