oracle 统计查询子集下所有记录数
表一CREATETABLETB1_TEST(CIDNUMBER,NAMEVARCHAR2(100),PIDNUMBERDEFAULT0)INSERTINTOTB1_TES...
表一
CREATE TABLE TB1_TEST
(
CID NUMBER,
NAME VARCHAR2(100),
PID NUMBER DEFAULT 0
)
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('1','test1','0');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('2','test2','1');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('3','test3','0');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('4','test4','1');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('5','test5','2');
表二
CREATE TABLE TB2_TEST
(
ID NUMBER,
CONTENT VARCHAR2(1000),
CID NUMBER
)
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('1','test1','2');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('2','test2','2');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('3','test3','1');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('4','test4','4');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('5','test5','5');
现在需要统计表二中所有CID为表一一级子集的记录数(一级子集即未根节点下第一级的集合)
注:这里说的统计一级子集的记录数并不是只统计一级子集,而是指显示一级子集,统计则需统计对应一级子集下所有子集的表二记录数
统计结果为
CID NAME SUM
1 test1 5
3 test3 0
求高手解答 sql如何写?
1、目标:是统计表二TB2_TEST中数据
2、展示:查询只显示表一TB1_TEST中一级节点CID、NAME及表二中记录数SUM
3、数据:不只是统计一级节点下的表二记录数,而是表二中对应表一所有一级节点下的所有子节点的记录数;
补充说明
表一TB1_TEST中存放数据是存在层级关系的,PID即为父级的CID;
一级子集就是跟节点下的子集,如上展示的根节点为"0",所有PID='0'的所有记录就是一级子集;
表二TB2_TEST中以CID跟表一TB1_TEST关联 展开
CREATE TABLE TB1_TEST
(
CID NUMBER,
NAME VARCHAR2(100),
PID NUMBER DEFAULT 0
)
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('1','test1','0');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('2','test2','1');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('3','test3','0');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('4','test4','1');
INSERT INTO TB1_TEST(CID ,NAME,PID) VALUES('5','test5','2');
表二
CREATE TABLE TB2_TEST
(
ID NUMBER,
CONTENT VARCHAR2(1000),
CID NUMBER
)
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('1','test1','2');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('2','test2','2');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('3','test3','1');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('4','test4','4');
INSERT INTO TBL_TEST(ID,CONTENT,CID ) VALUES('5','test5','5');
现在需要统计表二中所有CID为表一一级子集的记录数(一级子集即未根节点下第一级的集合)
注:这里说的统计一级子集的记录数并不是只统计一级子集,而是指显示一级子集,统计则需统计对应一级子集下所有子集的表二记录数
统计结果为
CID NAME SUM
1 test1 5
3 test3 0
求高手解答 sql如何写?
1、目标:是统计表二TB2_TEST中数据
2、展示:查询只显示表一TB1_TEST中一级节点CID、NAME及表二中记录数SUM
3、数据:不只是统计一级节点下的表二记录数,而是表二中对应表一所有一级节点下的所有子节点的记录数;
补充说明
表一TB1_TEST中存放数据是存在层级关系的,PID即为父级的CID;
一级子集就是跟节点下的子集,如上展示的根节点为"0",所有PID='0'的所有记录就是一级子集;
表二TB2_TEST中以CID跟表一TB1_TEST关联 展开
4个回答
展开全部
没有看懂,
以你的数据示例来说,cid=1 如何 取出5个记录数的? cid=5,又如何得出0 的 ?
以你的数据示例来说,cid=1 如何 取出5个记录数的? cid=5,又如何得出0 的 ?
追问
从表一的关系可以看出CID=2和4的记录的父节点ID为1,而CID=5的父节点ID为2,所以CID=5的记录也是属于父节点ID为1的,是子集的子集,所以表二中CID为2、1、4、5的均属于cid=1的记录是5条,以此类推CID=3的记录则为0
追答
分一定要给我,累死我了
select tb1.cid,name,
(select count(tb.id) from
(select CONNECT_BY_ROOT(t1.cid) rootid,t1.cid
from tb1_test t1
connect by prior t1.cid = t1.pid start with t1.pid = 0) ta
,TB2_TEST tb
where ta.cid = tb.cid and ta.rootid = tb1.cid) sum
from tb1_test tb1
where pid = 0
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select a.CID,a.name, count(*) SUM from TABLE TB2_TEST a ,TABLE TB1_TEST b where
a.CID=b.CID group by a.CID,a.name
a.CID=b.CID group by a.CID,a.name
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select CID,NAME,(select sum(ID) from TB2_TEST where TB2_TEST.CID=T.CID) from TB1_TEST T
追问
谢谢回答
但并未满足我的需求,我再补充一下
1、目标:是统计表二TB2_TEST中数据
2、展示:查询只显示表一TB1_TEST中一级节点CID、NAME及表二中记录数SUM
3、数据:不只是统计一级节点下的表二记录数,而是表二中对应表一所有一级节点下的所有子节点的记录数;
不知道这样描述清楚了不
追答
select CID,NAME,(select count(ID) from TB2_TEST where TB2_TEST.CID=T.CID) from TB1_TEST T
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询