J'ai une table comme ceci: Je veux utiliser SQL pour changer la table en quelque chose comme ceci: p> Faculty Financial Modelling Actuarial Science Statistics Biology
Science 25 30 28 16
3 Réponses :
Utiliser l'agrégation conditionnelle:
select faculty, max(case when program = 'Financial Modelling' then number_of_enrolled end) [Financial Modelling], max(case when program = 'Actuarial Science' then number_of_enrolled end) [Actuarial Science], max(case when program = 'Statistics' then number_of_enrolled end) Statistics, max(case when program = 'Biology' then number_of_enrolled end) Biology from mytable group by faculty
Pourquoi utilisons-nous une fonction max? Je ne comprends pas.
@Vivhuang: Nous avons besoin d'agrégation pour réduire le nombre d'enregistrements dans les Resultats (nous voulons un enregistrement par Faculté code>.
max () code> est une fonction agrégée; le cas
code> expression ne renvoiement qu'une valeur lorsque la condition est assortie et
null code> pour d'autres enregistrements du groupe; puis,
max () code> ignore NULL et renvoie le seul Valeur correspondante. Ceci est une méthode typique permettant de pivoter un jeu de données dans pure SQL. Une autre bonne chose est que cela fonctionne le plus au maximum, sinon tout, des fonctions de pivotement spécifiques au fournisseur).
Je ne sais pas pourquoi cela a eu un bowvote. C'est le moyen le plus simple de le faire. Et l'agrégation conditionnelle est presque toujours un peu mieux que le pivot de performance, sans oublier beaucoup moins obtus pour la syntaxe.
@Seanlange a convenu que cela ne devrait pas obtenir le bowvote (+1). L'agrégation conditionnelle offre un peu plus de flexibilité, mais vous êtes un gars intelligent et je ne comprends pas votre dédain pour pivot
@Johncappelletti merci pour les mots aimables. Je n'ai pas de dédain pour pivot. Je trouve juste la syntaxe extrêmement encombrante et cela n'offre aucun avantage que j'ai jamais trouvé. C'est juste horrible si vous avez besoin de plusieurs groupes lorsque vous avez plusieurs pivots dans une requête.
Vous pouvez le faire à l'aide de pivot
Semblable à GMB Vous pouvez utiliser Dynamic SQL comme ci-dessous pour effectuer le même pivot pour obtenir toutes les colonnes
+---------+-------------------+---------+---------------------+------------+ | faculty | Actuarial Science | Biology | Financial Modelling | Statistics | +---------+-------------------+---------+---------------------+------------+ | Science | 30 | 16 | 25 | 28 | +---------+-------------------+---------+---------------------+------------+