0
votes

SQL changer une table en un autre format

J'ai une table comme ceci: xxx pré>

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


0 commentaires

3 Réponses :


2
votes

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


5 commentaires

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é . max () est une fonction agrégée; le cas expression ne renvoiement qu'une valeur lorsque la condition est assortie et null pour d'autres enregistrements du groupe; puis, max () 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.



1
votes

Vous pouvez le faire à l'aide de pivot xxx

http: //sqlfiddle.com/#!18/0159F/3


0 commentaires

0
votes

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 |
+---------+-------------------+---------+---------------------+------------+


0 commentaires