Sql 报告-类似于横向联合的东西是我任务的解决方案吗?

Sql 报告-类似于横向联合的东西是我任务的解决方案吗?,sql,oracle11g,group-by,union,Sql,Oracle11g,Group By,Union,我想将数据分组为几个相同属性的值。 例如,如果我有这样实现的人员集合: name group_id sex ('Mike', 'A', 'Male') ('Mark', 'B', 'Male') ('Peter', 'C', 'Male') ('Sarah', 'A', 'Female') ('Dolores', 'A', 'Female') ('Jessica', 'C', 'Female') SELECT sex, group_id, COUNT(*) "nr of peo

我想将数据分组为几个相同属性的值。 例如,如果我有这样实现的人员集合:

  name   group_id  sex 
('Mike', 'A', 'Male') 
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female') 
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
Sex    Group A    Group B   Group C
Female     2          0         1
Male       1          1         1 
我可以按组id和性别对他们进行分组:

  name   group_id  sex 
('Mike', 'A', 'Male') 
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female') 
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
Sex    Group A    Group B   Group C
Female     2          0         1
Male       1          1         1 
并获得:

  sex  group_id  nr of people
Female    A       2
Female    B       0
Female    C       1
Male      A       1
Male      B       1
Male      C       1
但我想以更优雅、更简短的形式做这样的事情,并以这样的专栏形式呈现每个小组:

  name   group_id  sex 
('Mike', 'A', 'Male') 
('Mark', 'B', 'Male')
('Peter', 'C', 'Male')
('Sarah', 'A', 'Female')
('Dolores', 'A', 'Female')
('Jessica', 'C', 'Female') 
SELECT sex, group_id, COUNT(*) "nr of people"
FROM People
GROUP BY sex, group_id;
Sex    Group A    Group B   Group C
Female     2          0         1
Male       1          1         1 

使用
CASE
进行条件计数:

SELECT sex,
       sum(case when group_id = 'A' then 1 else 0 end) as group_A,
       sum(case when group_id = 'B' then 1 else 0 end) as group_B,
       sum(case when group_id = 'C' then 1 else 0 end) as group_C
FROM People
GROUP BY sex;

非常感谢。这正是我想要的。