我在Oracle数据库中有两个表。一个包含临时数据,另一个包含永久数据。我想对它们进行比较,看看对于相同的唯一ID,哪些列数据之间存在不匹配。
这是两个表:
BRIDGE_FINAL:
BRIDGE_ID MATERIAL_ID HEIGHT WIDTH THICKNESS
dff12cd6 4 0 0 0
15b54528 4 0 0 0
486a0aa7 4 0 0 0
2ae64f7b 1 0 0 0
2acf7e37 1 0 0 0
5e7baef5 1 0 0 0
BRIDGE_TEMP:
BRIDGE_ID MATERIAL_ID HEIGHT WIDTH THICKNESS
dff12cd6 4 5 0 0
15b54528 4 6 7 9
486a0aa7 4 0 0 0
2ae64f7b 1 0 0 0
2acf7e37 1 0 0 0
5e7baef5 1 0 0 0
我想确切显示哪些列具有相同BRIDGE_ID的不匹配值,并且两个列值并排
我的预期输出:
BRIDGE_ID COLUMN_NAME FINAL_VALUE TEMP_VALUE
dff12cd6 HEIGHT 0 5
15b54528 HEIGHT 0 6
15b54528 WIDTH 0 7
15b54528 THICKNESS 0 9
我需要在Oracle数据库中执行此操作。但是,如果可以在ASP.NET MVC中以代码形式完成此操作,那么它也可以。
答案 0 :(得分:0)
我在以下查询中模拟了您的示例:
create table final_value(bridge_id varchar(40), material_id int, height int, width int, thickness int);
create table temp_value(bridge_id varchar(40), material_id int, height int, width int, thickness int);
insert into final_value values ('dff12cd6',4,0,0,0),('15b54528',4,0,0,0),('486a0aa7',4,0,0,0);
insert into temp_value values ('dff12cd6',4,5,0,0),('15b54528',4,6,7,9),('486a0aa7',4,0,0,0);
select a.bridge_id as 'Bridge ID', a.measure_name AS 'Measure Name', a.final_val as 'Final Value', ISNULL(b.temp_val, 0) as 'Temp Value ' from
(select bridge_id,
measure_name,
final_val
from final_value
unpivot
(
final_val
for measure_name in (height, width, thickness)
) unpiv) a
left join
(select bridge_id,
measure_name,
temp_val
from temp_value
unpivot
(
temp_val
for measure_name in (height, width, thickness)
) unpiv) b
on
a.bridge_id = b.bridge_id and
a.measure_name = b.measure_name;
您也可以在这里从rextester引用相同的内容:https://rextester.com/WFHO83710