如何在两个表之间比较不匹配的数据并在Oracle数据库或ASP.NET MVC中连续显示它们

时间:2019-04-04 03:26:36

标签: sql asp.net-mvc oracle oracle11g

我在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中以代码形式完成此操作,那么它也可以。

1 个答案:

答案 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