est ici une approche:
select t.type as "Type"
, sum(case when t.status = 'A' then 1 else 0 end) as "Count A"
, sum(case when t.status = 'I' then 1 else 0 end) as "Count I"
, sum(case when t.status = 'F' then 1 else 0 end) as "Count F"
from my_table t
group by t.type
order by t.type desc
Cela fonctionne si vous avez des colonnes spécifiques que vous souhaitez renvoyer, et travaille pour « comptage » lignes qui répondent à des critères plus complexes fixés.
[EDIT]
(Ajouté le mot-clé DESC pour obtenir le jeu de résultats commandé comme le montre OP, +1 bonne prise par Rob van Wijk!)
(Andomar fait une bonne observation, avec plus Il existe d'autres approches pour obtenir le même jeu de résultats qui fonctionne bien si le seul "test" est une comparaison d'égalité sur une seule colonne.)
Oracle 8i supporte l'expression CASE, n'est-ce pas? Oracle 8 n'a pas, si je me souviens bien. On peut aller « vieille école » pour faire la même chose avec la fonction DECODE:
select t.type as "Type"
, sum(decode(t.status,'A',1,0)) as "Count A"
, sum(decode(t.status,'I',1,0)) as "Count I"
, sum(decode(t.status,'F',1,0)) as "Count F"
from my_table t
group by t.type
order by t.type DESC
[/ EDIT]
, nous voulons parfois vérifier plus d'une condition de type, et comprennent une rangée plus plus d'un compte. Nous pouvons obtenir un total
select t.type as "Type"
, sum(case when t.status in ('A') then 1 else 0 end) as "Count A"
, sum(case when t.status in ('I') then 1 else 0 end) as "Count I"
, sum(case when t.status in ('F') then 1 else 0 end) as "Count F"
, sum(case when t.status in ('A','I') then 1 else 0 end) as "#AI"
, sum(decode(sign(t.foo-t.bar),1,1,0)) as "#foo>bar"
, sum(decode(sign(10.0-t.foo),1,1,0)) as "#foo<10"
from my_table t
group by t.type
order by t.type desc
(Juste pour signaler, il est possible pour une ligne de satisfaire aux critères spécifiés pour plusieurs colonnes, et il pourrait donc être « compté » plus d'une fois. Parfois, c'est exactement ce que nous vouloir.)
+1 Bien que cela se briserait s'il y avait plus de 100 statuts différents :) – Andomar
+1 Bonne vieille solution pivotante. Seule la commande aurait dû descendre :-) –
Merci spencer! Cela fonctionne parfaitement! – zSynopsis