我正在使用我的SQL并且无法确定如何获得我想要的内容,而且我找不到类似的问题
" Node Sid"的每个字段有一个"父母Sid"领域。某些节点侧被列为多次,这不是问题。我有一个问题是找到(直接和间接)后代或"孩子的总数"对于每个节点SID。
以下是数据的示例
Node Sid Parent Sid
2011 2010
2012 2010
2013 2010
2014 2010
2010 2009
2009 2008
在这个例子中,我如何找到2009年嵌套的总数。我当前的SQL给出了每个单独的Node Sid,但没有给出嵌套在下面的总值。
SELECT COUNT(PARENT_NODE_SID) AS "NODES"
FROM NODE_V
GROUP BY PARENT_NODE_SID
我正在寻找的结果将是这样的
Node Sid Count of Node Sid
2011 0
2012 0
2013 0
2014 0
2010 4
2009 5
本质上,节点Sid的计数将包括它被列为"父Sid"的所有时间。以及列出它的Node Sids的所有时间都是" Parent Sid"
答案 0 :(得分:1)
with inputs (Node_Sid, Parent_Sid) as (
select 2011, 2010 from dual union all
select 2012, 2010 from dual union all
select 2013, 2010 from dual union all
select 2014, 2010 from dual union all
select 2010, 2009 from dual union all
select 2009, 2008 from dual
)
select node_sid, count(*) as cnt
from (
select connect_by_root(parent_sid) as node_sid
from inputs
connect by prior node_sid = parent_sid
)
group by node_sid
union all
select node_sid, 0 as cnt
from inputs
where node_sid not in (select parent_sid from inputs)
;
NODE_SID CNT
-------- ---
2009 5
2010 4
2008 6
2012 0
2013 0
2014 0
2011 0
答案 1 :(得分:0)
我可能完全不明白你的问题,但你能找到这样的东西吗?
SELECT PARENT_NODE_SID,COUNT(*)
FROM NODE_V
GROUP BY PARENT_NODE_SID
ORDER BY PARENT_NODE_SID