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

问题描述

我在 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 的代码中完成,它也可以。

标签: sqlasp.net-mvcoracleoracle11g

解决方案


我在以下查询中模拟了您的示例:

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


推荐阅读