【发布时间】:2022-01-04 14:22:17
【问题描述】:
我的表“A”包含这样的分层数据:
create table dictionary_a
(
id number not null,
parent_id number,
c_name varchar2(50),
constraint pk_dictionary primary key (id),
constraint fk_dictionary foreign key (parent_id) references dictionary_a (id)
);
id parent_id c_name
1 name1
2 1 name2
3 1 name3
4 3 name4
5 3 name5
6 2 name6
7 6 name7
...
(实际分层数据表有7级,但可能会有所变化)
还有我需要总结的数据表“B”:
create table numeric_data
(
dict_id number not null,
n_sum number,
constraint fk_numeric_data foreign key (dict_id) references dictionary_a (id)
);
dict_id n_sum
1 36.0
2 20.0
3 16.0
4 10.5
5 5.5
7 20.0
...
请注意,更高级别的节点也有与之相关的总和。
我需要获取每个级别的所有子节点的总和,并将它们与 n_sum 列中的实际数据进行比较(此列由用户填充,我的工作是找出所有不一致的地方):
dict_id n_sum actual_sum c_name
1 36.0 36.0 name1
2 20.0 20.0 name2
3 16.0 16.0 name3
4 10.5 10.5 name4
5 5.5 5.5 name5
6 20.0 name6
7 20.0 20.0 name7
我在网上搜索过,但我能找到的都是与具体问题密切相关的,没有通用的解决方案。
测试数据:
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (1, null, 'Department 1');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (2, 1, 'Department 2');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (3, 1, 'Department 3');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (4, 3, 'Department 4');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (5, 3, 'Department 5');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (6, 2, 'Department 6');
insert into dictionary_a (ID, PARENT_ID, C_NAME)
values (7, 6, 'Department 7');
insert into numeric_data (DICT_ID, N_SUM)
values (1, 36);
insert into numeric_data (DICT_ID, N_SUM)
values (2, 20);
insert into numeric_data (DICT_ID, N_SUM)
values (3, 16);
insert into numeric_data (DICT_ID, N_SUM)
values (4, 10.5);
insert into numeric_data (DICT_ID, N_SUM)
values (5, 5.5);
insert into numeric_data (DICT_ID, N_SUM)
values (7, 20);
commit;
我正在开发 Oracle 18c。
【问题讨论】:
-
您最好生成非随机数据并包含您的预期输出。您还说您想“将它们与 n_sum 列中的实际数据进行比较”,但是,没有其他列可以包含数字数据。
-
你是对的。我现在编辑可以吗?