问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

跪求一个超难的ORACLE数据纵向存储转成横向查询输出

发布网友 发布时间:2022-04-08 11:00

我来回答

2个回答

热心网友 时间:2022-04-08 12:29

--先建立四个表,并向表中插入数据
create table temp_bd_sbtz_gg
(
sbbh varchar2(20),
sbmc varchar2(20),
lxbh varchar2(20)
)
insert into temp_bd_sbtz_gg values('1','所内变压器','101');
insert into temp_bd_sbtz_gg values('2','真空断路器','102');
insert into temp_bd_sbtz_gg values('3','电磁式CT','103');
insert into temp_bd_sbtz_gg values('4','电容式CT','104');
commit;

create table temp_bm_sblx
(lxbh varchar2(20),
lxmc varchar2(20))
insert into temp_bm_sblx values('101','变压器');
insert into temp_bm_sblx values('102','断路器');
insert into temp_bm_sblx values('103','电磁式电压互感器');
insert into temp_bm_sblx values('104','电容式电压互感器');
commit;

create table temp_bm_sbsx
(
sxbh varchar2(20),
lxbh varchar2(20),
sxmc varchar2(20)
)

insert into temp_bm_sbsx values('201','101','电压等级');
insert into temp_bm_sbsx values('202','102','电压等级');
insert into temp_bm_sbsx values('203','103','电压等级');
insert into temp_bm_sbsx values('204','104','电压等级');
insert into temp_bm_sbsx values('205','101','产地');
insert into temp_bm_sbsx values('206','102','产地');
insert into temp_bm_sbsx values('207','103','产地');
insert into temp_bm_sbsx values('208','104','产地');
insert into temp_bm_sbsx values('209','104','维护人');
commit;

create table temp_bm_sbsxz
(sxzbh varchar2(20),
sbbh varchar2(20),
sxbh varchar2(20),
sxz varchar2(20))

insert into temp_bm_sbsxz values('301','1','201','220');
insert into temp_bm_sbsxz values('302','1','205','沈阳');
insert into temp_bm_sbsxz values('303','2','202','66');
insert into temp_bm_sbsxz values('304','2','206','长春');
insert into temp_bm_sbsxz values('305','3','203','220');
insert into temp_bm_sbsxz values('306','3','207','四平');
insert into temp_bm_sbsxz values('307','4','204','220');
insert into temp_bm_sbsxz values('308','4','208','四平');
insert into temp_bm_sbsxz values('309','4','209','张某');
commit;

create table temp_jieguo
(
bh varchar2(20),
name varchar2(20),
type varchar2(20),
lever varchar2(20),
address varchar2(20),
person varchar2(20)
)

--纵横转换的存储过程
create or replace procere p_temp_change is
sql_1 long;
begin
sql_1 := 'truncate table temp_jieguo';
execute immediate sql_1;
commit;
insert into temp_jieguo
select b.lxbh,
a.sbmc,
b.lxmc,
max(decode(c.sxmc, '电压等级', d.sxz)),
max(decode(c.sxmc, '产地', d.sxz)),
max(decode(c.sxmc, '维护人', d.sxz))
from temp_bd_sbtz_gg a,
temp_bm_sblx b,
temp_bm_sbsx c,
temp_bm_sbsxz d
where c.sxbh = d.sxbh
and a.lxbh = b.lxbh
and a.lxbh = c.lxbh
group by b.lxbh, a.sbmc, b.lxmc;
commit;
end;
--运行
declare
begin
p_temp_change;
end;
--查看结果
select * from temp_jieguo;

热心网友 时间:2022-04-08 13:47

--建立视图1用来关联【设备表】和【设备类型表】
create or replace view view_1 as
select
a.sbbh as 设备编号,
a.sbmc as 设备名称,
b.lxbh as 设备类型编号,
b.lxmc as 设备类型
from
bd_sbtz_gg as a,
bm_sblx as b
where
a.lxbh=b.sxbh;
--建立视图2-1用来关联【视图1】和【设备属性表】把【电压等级编号】的值取出
create or replace view view_2_1 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxbh as 电压等级编号
from
view_1 as a,
bm_sbsx as b
where
a.设备类型编号=b.lxbh
and
b.sxmc='电压等级';
--建立视图2-2用来关联【视图1】和【设备属性表】把【产地编号】的值取出
create or replace view view_2_2 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxbh as 产地编号
from
view_1 as a,
bm_sbsx as b
where
a.设备类型编号=b.lxbh
and
b.sxmc='产地';
--建立视图2-3用来关联【视图1】和【设备属性表】把【维护人编号】的值取出
create or replace view view_2_3 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxbh as 维护人编号
from
view_1 as a,
bm_sbsx as b
where
a.设备类型编号=b.lxbh
and
b.sxmc='维护人';
--建立视图3-1用来关联【视图2-1】和【设备属性值表】把【电压等级】的值取出
create or repalce view view_3_1 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxz as 电压等级
from
view_2_1 as a,
bm_sbsxz as b
where
a.电压等级编号=b.sxbh
and
a.设备编号=b.sbbh;
--建立视图3-2用来关联【视图2-2】和【设备属性值表】把【产地】的值取出
create or repalce view view_3_2 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxz as 产地
from
view_2_1 as a,
bm_sbsxz as b
where
a.产地编号=b.sxbh
and
a.设备编号=b.sbbh;
--建立视图3-3用来关联【视图2-3】和【设备属性值表】把【维护人】的值取出
create or repalce view view_3_3 as
select
a.设备编号,
a.设备名称,
a.设备类型,
b.sxz as 维护人
from
view_2_1 as a,
bm_sbsxz as b
where
a.维护人编号=b.sxbh
and
a.设备编号=b.sbbh;
--联合视图3-1~3-3检索最终结果
select
a.设备编号,
a.设备名称,
a.设备类型,
a.电压等级,
b.产地,
c.维护人
from
view_3_1 as a,
view_3_2 as b,
view_3_3 as c
where
a.设备编号=b.设备编号
and
b.设备编号=c.设备编号;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重磅|8月1日起 报关单的填法将重大改变 进出口权需要报关员么 宝宝被莫名的虫子咬了又红又肿又痒怎么? 北京疫情个为数是什么意思? 在做刀伤的手术时没有接上神经是医院的过错吗? 手术室收费项目有哪些 手术室的秘密:一台10万的手术,主刀医生拿多少?答案颠覆你的认知 阿里巴巴中修改产品信息只修改一小部分行吗?谢谢 可否给我一个阿里巴巴的序列号~谢谢了 阿里巴巴店铺产品搜索框代码谁有呢,给我发一下谢谢了! 千年学府的人文精神经久不衰 灵渡寺的历史故事 中国书院对联赏析 (三) / 查查362 广州梅沙黑利伯瑞书院国际高中学校好吗? 豫章书院的书院历史 父祖蝉联宴鹿鸣 馨香俎豆最关情。秋风送客浯江渡,忧记当年衣锦荣。古诗作者是谁? 宋朝四大书院的岳麓书院 从丰台看丹桥到园博园渡业书院怎么乘公交车? 很纠结,到底该不该辞职 我到底要不要离职? 到底要不要辞职? 本田奥德赛的这个键是干什么用的?怎么使用? 工作压力大,但是薪水不错,纠结要不要辞职,怕辞职找不到好工作? 奥德赛2013款调时钟的键子是哪个? 本田奥德赛定速巡航怎么用,新奥德赛定速巡航按钮图解 说一下本田新奥德赛多功能方向盘上按键的功能,详细些 我到底要不要选择辞职? 本田奥德赛上的按键是什么意思?怎么用? 身体,用文言文是怎么说来着 母亲生病心里难受的文言文 书院的对外交流 博学宏词科,集贤殿书院正字,蓝田县尉,什么意思 书院清池简要概括文章大意 在WORD里面我想把文章分成两版排下来怎么弄啊 word2003怎么把一页分成两半? 怎样把Word 2003的一版纸变成两版啊! 我的是word2003,如何将下面的重叠word,分成 2个 单独的word word2003怎么把一页分成两半?拜托各位大神 把2003的word文档分成两档 WORD如何把一页内容分成左右两版来打印?我设置了怎么就出来一半呢... 办理银行卡要填什么东西,最好发个图片。 办理工商银行卡需要填什么表格? 办农业银行卡怎么填写信息求图解释 中国农业银行办银行卡要填的表格需要填什么,要详细的 办银行卡的表格填写 去办理工商银行卡要填写什么 图片的 办理建行银行卡填的表格长什么样 wps 2013 文件误点了不保存如何找回 盆栽抽子树什么时侯发芽? 头年秋季嫁接的柚子树多久发芽?