重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

accessのクエリにクロス集計があります
例えば
person sex 血液型
------ --- ------
111 1 A
222 2 B
333 1 O
100 2 AB


集計↓
sex A B AB O 他
---- - - - - -
1 15 45 20 10 5
2 20 30 21 12 2

数字は適当です
こんな集計をするSQLを知りたいと思っています
どこか、これに近いテーマでSQLを解説している
サイトでもいいので、ご教授お願いします

A 回答 (2件)

#1回答者です。



MySQL 5.0以降が前提となりますが、以下のSQLを考えてみました。

create table person
(name varchar(10),
sex tinyint,
blood varchar(2));

insert into person values
('川口',1,'A'),
('宮本',1,'B'),
('加地',1,'A'),
('三都主',1,'A'),
('中田英',1,'O'),
('稲本',1,'AB'),
('中村',1,'?'),
('高原',1,'A'),
('柳沢',1,'B'),
('玉田',1,'A'),
('巻',1,'AB'),
('川上',2,'O'),
('澤',2,'A');
insert into person values
('川口',2,'A'),
('宮本',2,'B'),
('加地',2,'A');

select
sex,
sum(A) as A,
sum(B) as B,
sum(AB) as AB,
sum(O) as O,
sum(etc) as etc
from
(
select
sex,
case when blood='A' then count(*) else 0 end as A,
case when blood='B' then count(*) else 0 end as B,
case when blood='AB' then count(*) else 0 end as AB,
case when blood='O' then count(*) else 0 end as O,
case when blood not in('A','B','AB','O') then count(name) else 0 end as etc
from person
group by sex,blood
) as x
group by sex
order by sex
;
    • good
    • 0
この回答へのお礼

ありがとうございました
たぶんこれでできるとおもいます
まずは、お礼を、と感謝を申し上げます

お礼日時:2006/06/10 07:27

何が何でも、美しくなくて一つのSQLでやりたいですか?



分かりやすく、美しくなるなら、複数のSQLに分かれてもいいですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!