J'ai une table StudentMarks
avec des colonnes Name, Maths, Science, English
. Les données sont comme
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Je veux que cela soit arrangé comme suit:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Avec unpivot, je peux obtenir le nom, les marques correctement, mais je ne parviens pas à obtenir le nom de la colonne dans la table source dans la Subject
colonne dans le jeu de résultats souhaité.
Comment puis-je atteindre cet objectif?
J'ai jusqu'à présent atteint la requête suivante (pour obtenir le nom, les marques)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
Réponses:
Votre requête est très proche. Vous devriez pouvoir utiliser les éléments suivants, qui incluent le
subject
dans la liste de sélection finale:Voir SQL Fiddle avec démo
la source
Vous pouvez également essayer la méthode standard de non-pivotement SQL en utilisant une séquence de logique avec le code suivant. Le code suivant comporte 3 étapes:
supprimer toutes les combinaisons nulles (si elle existe, l'expression de table peut être totalement évitée s'il n'y a strictement aucune valeur nulle dans la table de base)
la source
SELECT * FROM étudiant
UNPIVOT (notes pour les matières en (mathématiques, sciences, anglais));
la source
Une autre façon d'utiliser la jointure croisée serait de spécifier les noms de colonne dans la jointure croisée
la source