表数据如下
姓名   科目   分数
赵一   语文   100
赵一   数学   90
赵一   英语   97
钱二   语文   100
钱二   数学   90查询结果
姓名   科目  参加考试科目数   序号
赵一   语文       3             1
赵一   数学       3             2
赵一   英语       3             3
钱二   语文       2             1
钱二   数学       2             2

解决方案 »

  1.   

    create table tt
    (sname varchar2(10),
     subject varchar2(10),
     score  number(3));
     
     select sname,subject,count(*)over(partition by sname),row_number()over(partition by sname order by rowid)
     from tt
      

  2.   

    select name, kemu, cou, row_num from t left join (select name,count(kemu) from t group by name) t2 on t.name=t2.name
    这样可以,但还有更好的
      

  3.   

    SQL> select * from tt;
     
    SNAME      SUBJECT    SCORE
    ---------- ---------- -----
    赵一       语文         100
    赵一       数学          90
    赵一       英语          97
    钱二       语文         100
    钱二       数学          90
     
    SQL> 
    SQL>  select sname,subject,count(*)over(partition by sname),row_number()over(partition by sname order by rowid )
      2   from tt
      3   order by rowid asc
      4  ;
     
    SNAME      SUBJECT    COUNT(*)OVER(PARTITIONBYSNAME) ROW_NUMBER()OVER(PARTITIONBYSN
    ---------- ---------- ------------------------------ ------------------------------
    赵一       语文                                    3                              1
    赵一       数学                                    3                              2
    赵一       英语                                    3                              3
    钱二       语文                                    2                              1
    钱二       数学                                    2                              2
     
    SQL> 
      

  4.   

    select 姓名,科目,分数,count(*) over(partition by 姓名) 参加考试科目数,
    row_number() over(partition by 姓名,科目 order by 分数 desc) 序号
    from tb
      

  5.   


    select a.姓名,a.科目,(select count(1) from tb b where a.姓名=b.姓名),
    row_number()over(partition by 姓名 order by 科目)
    from tb a
      

  6.   

    select sname,subject,count(*)over(partition by sname),row_number()over(partition by sname order by rowid )
      from tt
      order by rowid asc这种功能当然可以了