这个问题与我以前的帖子有关,原始表格如下
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
我的问题是如何修改查询以计算以下值:
PR 代表付款责任,例如,负责帐户158的付款是158(Paying_Account_ID
),因此158的Total_PR
是3(158,159) ,160)
NPR 代表非付款责任,例如,负责帐户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
答案 0 :(得分:0)
“总”查询在您的查询中没有IMO,因为它们不是特定于帐户的。我不会尝试将它们压缩到您的查询中,而是为它们编写单独的查询。
但是,“我的”查询特定于帐户(或customer_id?)。我的一般方法如下:
尝试编写一个查询,该查询会查询特定问题(例如,我的子公关帐户的数量,其中不包含自身)。毫无疑问,这个查询将包含像“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;