Sql 数据与解析函数的层次关系

Sql 数据与解析函数的层次关系,sql,database,oracle,Sql,Database,Oracle,这个问题与我以前的帖子有关,原始表格如下 Customer_ID Account_ID Paying_Account_ID Parent_Account_ID Company_ID 158 158 158 158 0 159 159 158 158

这个问题与我以前的帖子有关,原始表格如下

Customer_ID   Account_ID     Paying_Account_ID    Parent_Account_ID    Company_ID
 158            158             158                  158                     0
 159            159             158                  158                     0
 160            160             158                  158                     0
 181            181             181                  181                     0
 183            183             183                  183                     0
 24669          24669           24669                24669                   0         
 24671          24671           24671                24669                   0
 24670          24670           24670                24669                   0     
 3385127        3385127         3385127              24670                   0
为了确定数据的层次关系,即
父帐户ID
帐户ID
,下面是我使用的查询

SELECT lpad(' ', 2*level) || A.ACCOUNT_ID AS LEVEL_LABEL,
       CONNECT_BY_ISCYCLE "Cycle",
       LEVEL,
       A.*
FROM   ACCOUNT A
START WITH parent_account_id = account_id
CONNECT BY NOCYCLE PRIOR A.ACCOUNT_ID = A.PARENT_ACCOUNT_ID AND
        account_id <> parent_account_id;
我的问题是如何修改查询以计算以下各项的值:

  • My_Total_PR-我的孩子的PR帐户数,不包括其本身
  • Total_PR-总体结构中的PR账户总数
  • My_Total_NPR-我孩子的NPR帐户数,不包括其本身
  • 总NPR-总体结构中NPR账户的总数
PR代表付款责任,例如,负责账户158的付款是158(
Paying\u Account\u ID
),因此158的
Total\u PR
是3(158,159,160)
NPR代表非付款责任,例如,负责账户159的付款为158(
Paying\u Account\u ID
),因此159的
Total\u NPR
为1

这是预期的结果,任何建议都将不胜感激。谢谢

Level_Label Level Cycle My_Total_PR Total_PR  My_Total_NPR Total_NPR Paying_Account
 158          1      0       2         3          0              0        158
   159        2      0       0         0          0              1        158
   160        2      0       0         0          0              1        158
 181          1      0       0         1          0              0        181
 183          1      0       0         1          0              0        183
 24669        1      0       0         1          3              3        24669  
   24671      2      0       0         1          0              0        24671
   24670      2      0       0         1          1              1        24670
    3385127   3      0       0         1          0              0        3385127
“总计”查询在您的查询中没有位置,因为它们不特定于某个帐户。我不会试图将它们压缩到您的查询中,而是为它们编写单独的查询

但是,“我的”查询是特定于帐户(或客户id?)的。我的一般做法如下:

试着为单个给定帐户编写一个询问特定问题的查询(例如,我孩子的公关帐户数量,不包括其本身)。毫无疑问,这个查询将包含一个类似“and account_id=158”的子句

然后你可以做两件事:

您可以删除此子句并确保帐户id已公开。然后,查询将为所有帐户回答您的问题。然后,您可以将此选择与分层查询连接起来,如中所示

select ...
from 
    (treeQuery) t,
    (myQuery) m
where
    t.account_id = m.account_id;
或者,由于“my”查询只返回一个值,因此可以在投影中使用它们。如

select
    (select myQuery where account_id = t.account_id) alias1,
     t.* -- or whatever columns you want to see
from
    treeQuery t;

缺少上一个
帐户\u id
父帐户\u id
之间的运算符。我想在前面的问题中是
=,但对我来说没有多大意义。你能确认一下你用的是什么接线员吗?我插入了
=
.account\u id parent\u account\u id实际上可以忽略该account\u id parent\u account\u id。我手头没有Oracle实例,因此无法计算详细信息,但请查看分析函数。
select
    (select myQuery where account_id = t.account_id) alias1,
     t.* -- or whatever columns you want to see
from
    treeQuery t;