有两个表Table A、Table B是有联系的,如下图
我现在要得到的结果如Result所示
请问如何写SQL语句?
--------------------------------
Table ANAME_ID     Record_A Record_B
1     aaa         xxx
1     bbb         yyy
1     ccc
2     ddd         zzz
2         qqq
3         ttt
4     eee         iii
4     fff         mmm
5     ggg         nnn
5
5     hhh
…     …          …--------------------------------
Table BNAME_ID     NAME
1     namea
2     nameb
3     namec
4     named
5     namee
…     …
--------------------------------
ResultNAME Record_Num_A Record_Num_B
namea     3             2
nameb     1             2
namec     0             1
named     2             2
namee     2             1
…     …              …

解决方案 »

  1.   

    -------------------------------- 
    Table   A NAME_ID   Record_A         Record_B 
    1         aaa                 xxx 
    1         bbb                 yyy 
    1         ccc 
    2         ddd                 zzz 
    2                             qqq 
    3                             ttt 
    4         eee                 iii 
    4         fff                 mmm 
    5         ggg                 nnn 

    5         hhh 
    …          …                     … -------------------------------- 
    Table   B NAME_ID         NAME 
    1              namea 
    2              nameb 
    3              namec 
    4              named 
    5              namee 
    …                … 
    -------------------------------- 
    Result NAME      Record_Num_A              Record_Num_B 
    namea         3                         2 
    nameb         1                         2 
    namec         0                         1 
    named         2                         2 
    namee         2                         1 
    …              …                           … 
      

  2.   

    好像直接Group by就可以出来结果SQL> create table ta(
      2    name_id int,
      3    record_A nvarchar2(20),
      4    record_B nvarchar2(20)
      5  );Table createdSQL> create table tb(
      2    name_id int,
      3    name nvarchar2(20)
      4  );Table createdSQL> insert into ta
      2  select 1,'aaa','xxx' from dual
      3  union
      4  select 1,'bbb','yyy' from dual
      5  union
      6  select 1,'ccc',null from dual
      7  union
      8  select 2,'ddd','zzz' from dual;4 rows insertedSQL> insert into tb
      2  select 1,'namea' from dual
      3  union
      4  select 2,'nameb' from dual;2 rows insertedSQL> select b.name,count(a.record_a),count(a.record_b) from ta a
      2  inner join tb b on a.name_id=b.name_id
      3  group by b.name;NAME                                     COUNT(A.RECORD_A) COUNT(A.RECORD_B)
    ---------------------------------------- ----------------- -----------------
    namea                                                    3                 2
    nameb                                                    1                 1
      

  3.   

    使用Count函数的时候,COUNT(*)的时候,包括NULL的行
    COUNT(字段名)は、不包括NULL的行。是不是疑惑这个?
      

  4.   

    select name,nvl(sum_record_A,0),nvl(sum_record_B,0) from (
    select name,sum_record_A,sum_record_B from Tbl_z_b
    left join (
    select name_id, count(record_A) sum_record_A,count(record_B) sum_record_B from tbl_z_a  
    where exists(select 1 from Tbl_z_b where Tbl_z_b.name_id = tbl_z_a.name_id)
    group by name_id
    ) tbl_test on Tbl_z_b.name_id=tbl_test.name_id)