Le problème avec votre requête est que vous mélangez deux approches, à la fois valides mais ne sont pas compatibles.
La première utilise une instruction case
, comme @LONG l'a fait dans sa réponse, et c'est bien, mais elle ne nécessite pas group by
; vous êtes déjà groupé "artificiellement" en donnant des conditions différentes dans chaque colonne;
select sum(case when Blue = 1 then 1 else 0 end) as Blue_count,
sum(case when Red then 1 else 0 end) as Red_count,
sum(case when Yellow then 1 else 0 end) as Yellow_count,
sum(case when Black then 1 else 0 end) as Black_count,
sum(case when Green then 1 else 0 end) as Green_count
from TAB_GROUP
L'autre approche utilise un group by
, et il est bien aussi, mais vous ne devez compter les lignes pour chaque groupe
select COLOR, count(*) as CNT
from TAB_GROUP
group by COLOR
Cela vous donnera un résultat qui est le même comme celle souhaitée, mais avec des lignes et des colonnes inversées
COLOR | CNT
Blue | 2
Red | 2
Yellow | 1
Black | 1
Green | 1
pour déplacer des lignes à colonnes dont vous auriez besoin d'une fonction pivotante, dont la syntaxe peut varier en fonction de la base de données que vous êtes usin g. Cela rend cette approche plus complexe, mais aussi plus polyvalente dans le cas où le nombre de valeurs possibles augmente.
Avez-vous essayé quoi que ce soit? – Milney
Ce n'est pas comme ça que fonctionne StackOverflow, et laissez-moi vous dire que ce n'est pas comme ça que vous apprendrez le SQL (ou quoi que ce soit d'autre). Des questions comme celle-ci ont déjà été posées plusieurs fois sur plusieurs sites (SO inclus), tout ce que vous avez à faire est un peu de recherche. Si après cela, vous ne parvenez toujours pas à résoudre ce problème, revenez ici et postez une question décrivant ce que vous avez essayé et ce qui ne va pas, et vous trouverez de l'aide. Mots-clés tip: recherche "group by", "count", "case", "pivot" et vous pouvez trouver des ressources intéressantes. –
Désolé, j'ai oublié de poster ce que j'ai essayé – DerrickWong