热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLserver使用映射表进行数据相关操作_MySQL

基本需求:老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要
基本需求:

老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据,也要更新老数据与现有数据。

-------------------------------------------------

--Author:Oliver QIN

--Date:2015-11-07

--DESC:使用映射表对老数据进行更新

-------------------------------------------------

--存储老数据的表

--drop table TB_old

CREATE TABLE TB_old(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

--------------------------------------------------------------------

--插入测试数据(2014年的人员信息表)

---目前的编号是以省份来编号的,例如下面插入的测试数据

/*************************老的人力资源管理系统中******************************/

INSERT INTO TB_old SELECT 1,'yunnan01','JACK','云南昆明',45 union all

SELECT 2,'yunnan02','Tom','云南曲靖',82 union all

SELECT 3,'yunnan03','Alice','云南丽江',60 union all

SELECT 4,'yunnan04','Jerry','云南昭通',26 union all

SELECT 5,'chongqin05','Terry','重庆江北',22

---随着时间的变迁,需要把编号进行修改,统一为China开头的编号,例如:China01

--那接着就建立映射表

/*********************************映射表***************************************/

--drop table Mapping

CREATE TABLE Mapping (Old_IdSeq varchar(100),New_IdSeq varchar(100))

--插入映射关系

insert into Mapping select 'yunnan01','China01' union all

select 'yunnan02','China02' union all

select 'yunnan03','China03' union all

select 'yunnan04','China04' union all

select 'chongqin05','China05'

---这是2015年在新人力资源管理系统中新生成的一张信息表 注明:在老系统中已经生成的编号不可以替换成现有编号,需要延用至退休

--drop table TB_New 注:新的人力资源表中JACK的年龄更新为99,并且新加了JOSN的相关信息

CREATE TABLE TB_New(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

--插入新的测试数据

/*************************新的人力资源管理系统中******************************/

INSERT INTO TB_New SELECT 1,'China01','JACK','云南昆明',99 union all

SELECT 2,'China02','Tom','云南曲靖',82 union all

SELECT 3,'China03','Alice','云南丽江',60 union all

SELECT 4,'China04','Jerry','云南昭通',26 union all

SELECT 5,'China05','Terry','重庆江北',22 union all

SELECT 6,'China06','JOSN','广东深圳',25

-------------现在有如下需求

/*********************************************************

随着时间的推移,需要实时的更新他们的相关信息,假设录入该年龄的时间是2014年

2015年系统进行升级,录入的相关信息则按新的规则命名编号,如果年龄大于45岁则不更新相关信息,视为退休

新的系统中已经把老的信息按照新的编码规则进行编码,但是这些信息需要用来上报给总经理查看。

*/

/**************************上报数据库中的信息*******************************************/

/*上报库中的信息是以前老的系统中的数据*/

--drop table Report_Rpt

CREATE TABLE Report_Rpt(Id INT,IdSeq VARCHAR(20),Name VARCHAR(200),Adress varchar(200),Age int)

INSERT INTO Report_Rpt select * from TB_old

/**************************************************************************************

要求:使用新的人力资源管理系统中提供的数据对更新上报信息中的年龄

*/

--建立映射视图,用于关联更新

go

--select * from Differrence_Data

CREATE VIEW Differrence_Data

as

select A.Age,B.Old_IdSeq from TB_New A

left join Mapping B ON A.IdSeq=B.New_IdSeq

left join TB_old C ON C.IdSeq=B.Old_IdSeq

WHERE A.Age<>C.Age

---------------------------------------------------------

GO

--DROP PROC Get_NewInfo

CREATE PROC Get_NewInfo

AS

BEGIN

-------------------------------------------------------情况一:更新老编码对应的年龄信息

if((select COUNT(*) from Differrence_Data)>0)

-------------------------如果在视图Differrence_Data中存在数据,那么更新相应的老编码信息

UPDATE Report_Rpt SET Age=A.Age FROM Differrence_Data A WHERE A.Old_IdSeq=Report_Rpt.IdSeq

IF ( (select COUNT(1) from TB_New where IdSeq not in

(SELECT New_IdSeq FROM Mapping

union all

select IdSeq FROM Report_Rpt

)

) >0

)

-------------------------------------------------情况二:将新增的数据插入到上报表中

---插入新增的数据到上报信息表中

insert into Report_Rpt

select * from TB_New A WHERE A.IdSeq NOT IN (SELECT New_IdSeq FROM Mapping

UNION all

select IdSeq FROM Report_Rpt)

------------------------------------------------情况三:更新新编码对应的年龄信息

IF (

(SELECT COUNT(1) FROM TB_New WHERE

IdSeq not in

(select New_IdSeq from Mapping)

AND IdSeq IN

(SELECT IdSeq FROM Report_Rpt)

)>0

)

--------------------更新新增加数据年龄变更的信息

UPDATE Report_Rpt SET Age=A.Age FROM TB_New A WHERE

A.IdSeq not in

(select New_IdSeq from Mapping)

AND A.IdSeq IN

(SELECT IdSeq FROM Report_Rpt)

AND A.IdSeq = Report_Rpt.IdSeq

END

--执行存储过程

EXEC Get_NewInfo

--老人力资源表

select * from TB_old

--新人力资源表

select * from TB_New

--映射表

select * from Mapping

--上报表

select * from Report_Rpt

--------------------------------------------

--删除表语句

--DROP TABLE TB_old,TB_New,Mapping,Report_Rpt

--------------------------------以下是测试老编码年龄变化跟新编码年龄变化还有新增新的人员信息时,是否也会更新跟插入相应的数据

--------------------------------------改变新人力资源系统中的数据进行逻辑测试

insert into TB_New SELECT 7,&#39;China07&#39;,&#39;测试01&#39;,&#39;云南昆明&#39;,21 union all

SELECT 8,&#39;China08&#39;,&#39;测试02&#39;,&#39;云南昆明&#39;,33

---------------修改新数据进行测试

update TB_New set Age=&#39;100&#39; where Id=&#39;6&#39;

---------------修改老数据的年龄进行测试

update TB_New set Age=&#39;100&#39; where Id=&#39;1&#39;

推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Python版Protobuf的安装和使用方法,包括版本选择、编译配置、示例代码等内容。通过学习本教程,您将了解如何在Python中使用Protobuf进行数据序列化和反序列化操作,以及相关的注意事项和技巧。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
haiziqian_486_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有