表“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 不会将其转换为层次结构。
您可以
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 | 空 |