这个问题和我之前的帖子有关,原表如下
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
为了识别数据的层次关系,它们是 PARENT_ACCOUNT_ID
和 ACCOUNT_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;
这是查询的结果
Level_Label Level CustomerID AccountID Paying_AccountID Parent_AccountID CompanyID
158 1 158 158 158 158 0
159 2 159 159 158 158 0
160 2 160 160 158 158 0
181 1 181 181 181 181 0
183 1 183 183 183 183 0
24669 1 24669 24669 24669 24669 0
24671 2 24671 24671 24671 24669 0
24670 2 24670 24670 24670 24669 0
3385127 3 3385127 3385127 3385127 3385127 0
我的问题是如何修改查询以计算以下值:
- My_Total_PR - 我的 child PR 帐户的数量,不包括它自己。
- Total_PR - 整体结构中PR账户总数
- My_Total_NPR - 我的 child NPR 帐户的数量,不包括它自己。
- Total_NPR——整体结构中NPR账户总数
PR代表Payment Responsible,例如Account 158负责的payment是158(Paying_Account_ID
),所以Total_PR
为158是 3 (158, 159, 160)
NPR 代表 Non Payment Responsible,例如 Account 159 的付款责任是 158 (Paying_Account_ID
),所以 159 的 Total_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
最佳答案
“总计”查询在您的查询中没有 IMO 的位置,因为它们不是特定于帐户的。我不会尝试将它们压缩到您的查询中,而是为它们编写单独的查询。
但是,“我的”查询特定于一个帐户(或 customer_id ?)。我的一般方法如下:
尝试编写一个查询来回答单个给定帐户的特定问题(例如,我的 child PR 帐户的数量不包括它自己)。毫无疑问,此查询将包含类似“and account_id = 158”的子句。
然后你可以做两件事:
要么删除该子句并确保公开 account_id。该查询随后将回答您针对所有 帐户的问题。然后您可以将此选择与您的分层查询一起加入
select ...
from
(treeQuery) t,
(myQuery) m
where
t.account_id = m.account_id;
或者,由于“我的”查询仅返回一个值,您可以在投影中使用它们。如
select
(select myQuery where account_id = t.account_id) alias1,
t.* -- or whatever columns you want to see
from
treeQuery t;
关于sql - 具有分析功能的数据的层次关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9273912/