SQL - 汇总"嵌套"值

时间:2017-03-15 14:56:36

标签: sql oracle

我正在使用我的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"

2 个答案:

答案 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