Bonjour,
Soit le petit script :
---------------------
create table toto (
col1 char(1),
col2 char(1)
)
insert toto (col1, col2) values ('a', 'Y')
insert toto (col1, col2) values ('a', 'N')
insert toto (col1, col2) values ('a', 'Y')
insert toto (col1, col2) values ('b', 'Y')
select * from toto
select col1,
count(*) as 'Nombre',
count(*) as 'Nombre_Y',
count(*) as 'Nombre_N'
from toto
group by col1
drop table toto
---------------------
qui me renvoie naturellement :
---------------------
col1 col2
---- ----
a Y
a N
a Y
b Y
col1 Nombre Nombre_Y Nombre_N
---- ----------- ----------- -----------
a 3 3 3
b 1 1 1
---------------------
Y-a-t-il une utilisation avancée de COUNT qui me donnerait dans la requête
d'agrégation le résultat suivant :
col1 Nombre Nombre_Y Nombre_N
---- ----------- ----------- -----------
a 3 2 1
b 1 1 1
bien évidemment sans mofier la strucutre de la table toto...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
HervéR
Je crois que j'ai trouvé : en mariant un SUM avec un CASE ! --------------------- create table toto ( col1 char(1), col2 char(1) ) insert toto (col1, col2) values ('a', 'Y') insert toto (col1, col2) values ('a', 'N') insert toto (col1, col2) values ('a', 'Y') insert toto (col1, col2) values ('b', 'Y') select * from toto select col1, count(*) as 'Nombre', sum(case col2 when 'Y' then 1 else 0 end) as 'Nombre_Y', sum(case col2 when 'N' then 1 else 0 end) as 'Nombre_N' from toto group by col1 drop table toto ---------------------
renvoie comme souhaité --------------------- col1 col2 ---- ---- a Y a N a Y b Y col1 Nombre Nombre_Y Nombre_N ---- ----------- ----------- ----------- a 3 2 1 b 1 1 0 ---------------------
Je crois que j'ai trouvé : en mariant un SUM avec un CASE !
---------------------
create table toto (
col1 char(1),
col2 char(1)
)
insert toto (col1, col2) values ('a', 'Y')
insert toto (col1, col2) values ('a', 'N')
insert toto (col1, col2) values ('a', 'Y')
insert toto (col1, col2) values ('b', 'Y')
select * from toto
select col1,
count(*) as 'Nombre',
sum(case col2 when 'Y' then 1 else 0 end) as 'Nombre_Y',
sum(case col2 when 'N' then 1 else 0 end) as 'Nombre_N'
from toto
group by col1
drop table toto
---------------------
renvoie comme souhaité
---------------------
col1 col2
---- ----
a Y
a N
a Y
b Y
col1 Nombre Nombre_Y Nombre_N
---- ----------- ----------- -----------
a 3 2 1
b 1 1 0
---------------------
Je crois que j'ai trouvé : en mariant un SUM avec un CASE ! --------------------- create table toto ( col1 char(1), col2 char(1) ) insert toto (col1, col2) values ('a', 'Y') insert toto (col1, col2) values ('a', 'N') insert toto (col1, col2) values ('a', 'Y') insert toto (col1, col2) values ('b', 'Y') select * from toto select col1, count(*) as 'Nombre', sum(case col2 when 'Y' then 1 else 0 end) as 'Nombre_Y', sum(case col2 when 'N' then 1 else 0 end) as 'Nombre_N' from toto group by col1 drop table toto ---------------------
renvoie comme souhaité --------------------- col1 col2 ---- ---- a Y a N a Y b Y col1 Nombre Nombre_Y Nombre_N ---- ----------- ----------- ----------- a 3 2 1 b 1 1 0 ---------------------