有两个表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
… … …
我现在要得到的结果如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
… … …
解决方案 »
- oracle中查表时字符串是不是加单引号或者双引号都行啊,二者有啥区别吗
- 有点难度的两表查询语句
- 小弟开发了一套煤矿物资管理系统,已经交付客户使用,在使用过程中出现一个相当麻烦的问题
- 从未见之怪现象 select sysdate from dual 带不带服务名连接 结果不一致
- 求购一个存储过程,急急急急啊!
- 如何用java开发oracle数据库的逻辑备份与恢复
- 请问各位,在ORACLE的存储过程中如何判断插入或更新语句是否成功?
- 我想知道,在Oracle中写存储过程的步骤
- 悬赏,一个SQL语句如何拼写。(肯定接贴)
- 怎样把sysdba授权给用户?
- 怎么用SQL语句实现?
- sysdate 使用 index 的问题
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
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 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
COUNT(字段名)は、不包括NULL的行。是不是疑惑这个?
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)