2013-10-24 61 views
0

我有一个脑屁,我似乎无法超越它。我以前做过这个,但我不记得我是如何做到的。这里的要点是:我有一个我创建的表(测试),在这张表中我存储了一些随机信息。 (这是一个测试表,所以表中的信息不适用于任何东西)。我的测试表如下所示:甲骨文总排

Name  varchar2 Primary key 
age  varchar2 
sex  char 
social varchar2 Primary Key 

我使用此表作为示例,这就是为什么我有两个主键。我正在向学生展示如何制作复合键。

我的问题是这样的:我如何创建一个总数在行尾的查询?

我正在寻找这样的事情:

Name Male Female 
xxxxx m 
xxxxx m 
xxxxx m 
xxxxx m 
xxxxx   F 
xxxxx   F 
Total: 4  2 

我创建了下面的查询(这完全不是那么回事),只是作为一个测试。

set feedback on  
compute sum(COUNT(SEX)) LABEL "# of males" of sex_count on report 
select count(sex) as sex_count 
from test 
where sex = upper('m') 

回答

2

这会解决您的问题吗?

select name, male, female from (
    select name, 
      decode(sex, 'm', 'm', null) Male, 
      decode(sex, 'f', 'f', null) Female, 0 n 
     from test 
    union 
    select 'Total', 
      to_char(sum(decode(sex, 'm', 1, 0))), 
      to_char(sum(decode(sex, 'f', 1, 0))), 
      1 
     from test 
    group by 'Total' 
) order by n 

链接小提琴:基于 http://sqlfiddle.com/#!4/0e501/3/0

+0

它可以,但我记得使用计算功能上面的查询。我觉得我只是让事情变得更加艰难。 – nmaybyte

0

“计算...的报告” 的声明,它看起来像你使用SQL * Plus。试试这个:

compute count label total of male female on report 
break on report 

select name, decode(sex, 'm', sex) male, decode(sex, 'f', sex) female 
    from test 
order by name;