从行创建层次结构

问题描述 投票:0回答:1

表“accounts”的值如下:

创建表作为帐户( le_parent varchar2(100), 合法实体 varchar2(100), trans_account_parent varchar2(100) , trans_account varchar2(100), 账户净值, 期间 varchar2(10) );

INSERT INTO DEPARTMENT VALUES ('yayasan pahang', 'yayasan pahang', '现金转账','908B1-palang',300,'Jul-22'); INSERT INTO DEPARTMENT VALUES ('yayasan pahang', 'yayasan pahang', '现金转账','A2462-palang',-300,'Jun-23'); INSERT INTO DEPARTMENT VALUES ('yayasan pahang', 'yayasan pahang', '付款','a5365-loindm',500,'Jul-22');

查询:

选择 le_parent 、 legal_entity 、 trans_account_parent 、 trans_account 、 account_net 、 period 来自帐户;

以上查询给出以下结果:

le_parent 法律实体 trans_account_parent 交易账户 account_net
彭亨亚亚桑 彭亨亚亚桑 现金转账 908B1-帕朗 300 7 月 22 日
彭亨亚亚桑 彭亨亚亚桑 现金转账 A2462-帕朗 -300 23 年 6 月
彭亨亚亚桑 彭亨亚亚桑 付款 a5365-loindm 500 7 月 22 日

我想更改脚本以返回以下格式的结果

账户层次结构 7 月 22 日 23 年 6 月
彭亨亚亚桑
彭亨亚亚桑
现金转账
908B1-帕朗 300
A2462-帕朗 -300
付款
a5365-loindm 500

所以基本上以层次结构的形式制作它,即帐户层次结构的一列,其中 le_parent 作为顶部节点,然后是 legal_entity,然后是 trans_account_parent,然后是 trans_account,我希望仅显示具有相关期间的 trans_account 的会计净额作为第二列,数据也应按所有这四列进行分组,以免出现重复的层次结构:

账户层次结构
le_parent
法律实体
trans_account_parent
交易账户 account_net

我只能使用简单的sql,不能使用plsql。 我尝试使用 unpivot 它将所有 4 列合并为一列,并为第二列添加 case 语句,例如 'case when period='jul-22' then account_net' end as jul-22 但 unpivot 不会将其转换为层次结构。

sql oracle transpose hierarchy
1个回答
0
投票

您可以

UNPIVOT
,然后
PIVOT

SELECT account_hierarchy,
       jul_22,
       jun_23
FROM   (SELECT a.*, NULL AS ignore FROM accounts a)
       UNPIVOT(
         (account_hierarchy, period, amount)
         FOR type IN (
           (le_parent, period, ignore) AS 1,
           (legal_entity, period, ignore) AS 2,
           (trans_account_parent, period, ignore) AS 3,
           (trans_account, period, accounted_net) AS 4
         )
       )
       PIVOT (
         SUM(amount)
         FOR period IN (
           'Jul-22' AS Jul_22,
           'Jun-23' AS Jun_23
         )
       )

对于样本数据,输出:

帐户_层次结构 JUL_22 JUN_23
彭亨亚亚桑
彭亨亚亚桑
现金转账
908B1-帕朗 300
A2462-帕朗 -300
付款
a5365-loindm 500

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.