Bonjour
Je possède une table T1 comme ceci :
Nombre(Number(5))
Chaîne(Varchar2(40))
Le champ 'nombre' contient des valeurs numériques, de 0 à 86000 environ (il y en a environ 35000 différents en tout).
J'ai actuellement une requête croisée, me retournant le total des champs possédant un nombre et une chaîne donnée, soit environ ceci :
J'ai donc un regroupement par chaîne, et quelques enregistrements du champ "Nombre". En effet, je n'ai pas 1 colonne par valeur, mais un regroupement! Je m'explique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Chaîne 0 1 ... 20 30 .... 90000 100000 ... chaîne1 12 43 546 76 7878 785 chaîne2 2 345 757 67 876 67 chaîne3 437 3 43 76 879 908
je compte de cette façon :
Le soucis c'est que je souhaite obtenir l'inverse! Soit les chaînes en entête de colonne, et les valeurs de "Nombre" (regroupés comme je vous l'ai montré) en entête de ligne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT chaîne, count(CASE WHEN Nombre=0 THEN 1 END)AS M_0, count(CASE WHEN Nombre=1 THEN 1 END)AS M_1, ... count(CASE WHEN Nombre>=100 AND Nombre<200 THEN 1 END)AS M_100_200, ... count(CASE WHEN Nombre>=90000 AND Nombre<100000 THEN 1 END)AS M_90000_100000, ... FROM T1 GROUP BY chaîne ORDER BY chaîne;
Pour les chaînes en entête ce n'est pas un problème, j'ai le moyen de les récupérer toutes (donc je peux faire un "CASE(WHEN chaine="chaine1" THEN 1 END)" etc..), mais comment faire pour le regroupement du champ "nombre" ? (si je met "GROUP BY nombre", j'ai bien évidemment les 35000 lignes qui s'affichent...)!
Une idée ?...
Merci beaucoup
Partager