ORACLE中 2张类似表进行数据对比,并把值放到另一张表里面进行显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE中 2张类似表进行数据对比,并把值放到另一张表里面进行显示相关的知识,希望对你有一定的参考价值。

情况如何有一个综合总表A,有30张以日期为命名的数据表B
将B表中的某一个字段跟A表的相同字段进行对比
如果B有中于A表有具有相同的数据 则在C表中显示该字段内容的名字。并在状态标签中标示为1;
如果B有中于A表有不具有相同的数据 则在C表中显示该字段内容的名字。并在状态标签中标示为0.

C表表结构如下
CREATE TABLE aaa_ALL_COMPARISON_ALL
(
aaa VARCHAR2(25 BYTE),
DATA1 VARCHAR2(5 BYTE),
DATA2 VARCHAR2(5 BYTE),
DATA3 VARCHAR2(5 BYTE),
DATA4 VARCHAR2(5 BYTE),
DATA5 VARCHAR2(5 BYTE),
DATA6 VARCHAR2(5 BYTE),
DATA7 VARCHAR2(5 BYTE),
DATA8 VARCHAR2(5 BYTE),
DATA9 VARCHAR2(5 BYTE),
DATA10 VARCHAR2(5 BYTE),
DATA11 VARCHAR2(5 BYTE),
DATA12 VARCHAR2(5 BYTE),
DATA13 VARCHAR2(5 BYTE),
DATA14 VARCHAR2(5 BYTE),
DATA15 VARCHAR2(5 BYTE),
DATA16 VARCHAR2(5 BYTE),
DATA17 VARCHAR2(5 BYTE),
DATA18 VARCHAR2(5 BYTE),
DATA19 VARCHAR2(5 BYTE),
DATA20 VARCHAR2(5 BYTE),
DATA21 VARCHAR2(5 BYTE),
DATA22 VARCHAR2(5 BYTE),
DATA23 VARCHAR2(5 BYTE),
DATA24 VARCHAR2(5 BYTE),
DATA25 VARCHAR2(5 BYTE),
DATA26 VARCHAR2(5 BYTE),
DATA27 VARCHAR2(5 BYTE),
DATA28 VARCHAR2(5 BYTE),
DATA29 VARCHAR2(5 BYTE),
DATA30 VARCHAR2(5 BYTE),
DATA31 VARCHAR2(5 BYTE)
)
备注:data为某一个天日期下的状态标示(1或者0)

B表表结构如下

CREATE TABLE 201003XX
(
aaa VARCHAR2(25 BYTE)
)

A表表结构如下
CREATE TABLE aaa_ALL
(
aaa VARCHAR2(25 BYTE)
)

望各位大侠指教!!!谢谢!

你要不嫌累:
insert into aaa_ALL_COMPARISON_ALL
select aa1.aaa,DATA1,DATA2,DATA3.......,DATA31 from
(select a1.aaa,(case when b1.aaa is null then 0 else 1 end) DATA1
from aaa_ALL a1 left join 20100301 b1 on a1.aaa=b1.aaa) aa1
inner join
(select a2.aaa,(case when b2.aaa is null then 0 else 1 end) DATA2
from aaa_ALL a2 left join 20100301 b2 on a2.aaa=b2.aaa) aa2
on aa1.aaa=aa2.aaa
inner join
.
.
.
.
inner join
(select a31.aaa,(case when b31.aaa is null then 0 else 1 end) DATA31
from aaa_ALL a31 left join 20100331 b31 on a31.aaa=b31.aaa) aa31
on aa1.aaa=aa31.aaa
如果aaa不是唯一,上述语句无效。
参考技术A 好像得用存储过程 了, 参考技术B 楼主需要在表C 形成30 条记录还是一条记录啊? 参考技术C 没错,用存储过程来实现。
不过你这表结构设计得实在是有点不理解。

oracle中如何获得日期中的年份?

参考技术A

以下列举两种方式在在Oracle中获得日期中的年份,例如把sysdate中的年份取出来。

1、Select to_number(to_char(sysdate,'yyyy')) from dual

实例代码:

select

to_number(to_char(t.hiredate,'yyyy'))as 入职年,

from emp t;

运行结果:

2、使用Extract函数,Select Extract(year from sysdate) from dual,这种方法省掉了类型转换,

看上去更加简洁。此方法获得的结果,是数值型

实例代码:

select

extract(year from t.hiredate) as入职年,

from emp t  ;

运行结果:

扩展资料:

如果想在Oracle中获取日期中的月份,天数。可以将Select to_number(to_char(sysdate,'yyyy')) 

from dual改为Select to_number(to_char(sysdate,'MM')) from dual和Select 

to_number(to_char(sysdate,'DD')) from dual。

Extract函数中只需将Select Extract(month from sysdate) from dual改为Select Extract(year from sysdate) from dual和Select Extract(day from sysdate) from dual

以上是关于ORACLE中 2张类似表进行数据对比,并把值放到另一张表里面进行显示的主要内容,如果未能解决你的问题,请参考以下文章

oracle 两表数据对比---minus

oracle 两表数据对比---minus

oracle 中如何创建一个角色并把角色赋予指定账户

oracle如何比较两个表数据的差异?

Oracle merge into 的效率问题

Oracle两张表关联中间表查询,那张关联到数据就显示,关联不到就负空值