`

sql实现多行数据比对更新或插入操作

阅读更多
Merge语法
MERGE [hint] INTO [schema ] table [t_alias]
USING [schema ]{ table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

1)创建一个“比例因子”表

-- Create table
create table LF_FACT_GL
(
  ID        NUMBER(10),
  VALID     NUMBER(1) default 1 not null,
  ZONE_ID   NUMBER(10),
  FACTOR_PG NUMBER(12,6) default 0 not null,
  FACTOR_QG NUMBER(12,6) default 0 not null,
  FACTOR_PL NUMBER(12,6) default 0 not null,
  FACTOR_QL NUMBER(12,6) default 0 not null,
  CASE_ID   NUMBER(10) not null,
  V_LEVEL   NUMBER(10) default 0
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
 comment on column LF_FACT_GL.CASE_ID
  is '作业编号';
 comment on column LF_FACT_GL.V_LEVEL
  is '电压等级,固定;';
 comment on column LF_FACT_GL.ZONE_ID
  is '分区编号';


2)需求描述
   用户可以将某个作业的比例因子导入到另一个作业下。如果另一个作业的比例因子中的“电压等级”和“分区编号” 与操作的作业下的比例因子的电压等级”和“分区编号”分别相等,则做更新操作,否则做插入操作。

3)实现的sql(mybatis)
 

<insert id="insertOrUpdate" parameterType="map">
		 MERGE INTO LF_FACT_GL T1  
         USING (SELECT ID ,VALID ,ZONE_ID , FACTOR_PG,FACTOR_QG ,FACTOR_PL,FACTOR_QL ,CASE_ID ,V_LEVEL
                FROM LF_FACT_GL WHERE ID IN
                <foreach collection="iDs" index="index" item="item" open="(" separator="," close=")">  
                 #{item}  
                </foreach> 
               ) T2 
         ON (T1.ZONE_ID = T2.ZONE_ID AND T1.V_LEVEL = T2.V_LEVEL AND T1.CASE_ID = #{caseID} )   
         WHEN NOT MATCHED THEN  
         INSERT  VALUES 
              ( SEQ_PLSF_TBL.NEXTVAL , T2.VALID,T2.ZONE_ID,
                T2.FACTOR_PG,T2.FACTOR_QG,
                T2.FACTOR_PL,T2.FACTOR_QL,#{caseID},T2.V_LEVEL
               )   
         WHEN MATCHED THEN 
         UPDATE SET T1.VALID = T2.VALID,
                    T1.FACTOR_PG = T2.FACTOR_PG,T1.FACTOR_QG = T2.FACTOR_QG,
                    T1.FACTOR_PL = T2.FACTOR_PL,T1.FACTOR_QL = T2.FACTOR_QL
         
	</insert>
  

  map(iDs:String[比例因子编号],aseID:作业编号)


  merge 时,on(join 字段)不可以参加update ,否则报错(0n 关联字段不能更新 字段)
分享到:
评论
1 楼 cuishuangjia 2013-06-11  
你好,可以使用DBTOOLS来处理。
目前是测试阶段,只需要直接把机器码发给作者即可。(cuishuangjia@gmail.com)

ver 20130610

修正内容:

1.SQL历史信息

2.增加复制功能

3.支持DB2
DbTools工具下载:
http://cuishuangjia.iteye.com/
支持ORACLE,MYSQL,SQLSERVER,POSTGRE,DB2四种数据库相互转换功能

功能:
1。将数据库中的表结构和数据保存到EXCEL中。
2。将EXCEL中的数据,同步到数据库中。
3。当表结构发生变化时,数据不会丢失。
4。根据EXCEL中的表结构,生成建表语句SQL文。
5。多用户使用该软件时,可以随时记录某个用户对数据库的操作。
6。可以为进行压力测试,自动生成数据。
7。导出表结构,根据表结构和数据库中的表结构进行差分。
8。导出DB结构,和现有环境DB进行表结构差分
9。导出用户自定义表结构,根据表结构导入,导入数据前对EXCEL校验进行数据库验证和业务逻辑验证


亲,请将所有压缩文件全部下载后再解压。
作者邮件:cuishuangjia@gmail.com

相关推荐

    sql实现多行合并一行

    在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...

    sql 多行数据一行显示

    多行数据一行显示多行数据一行显示多行数据一行显示多行数据一行显示

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    SQL 字符串分割函数实现多行数据转换 在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个...

    sql多行转列

    主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。

    Insert语句插入多行数据.pdf

    在数据库管理中,INSERT语句是用于...总之,使用INSERT语句插入多行数据是数据库操作中的常用技巧,它提高了数据输入的效率,尤其是在处理大量数据时。熟练掌握这一技能对于任何数据库管理员或开发人员来说都至关重要。

    SQL多行变一行的方法

    SQL方法,将一列中的多行变为一行,将按一定条件筛查出来的多行数据变为一行数据

    DataGridView填充、更新、删除(多行)Sql_Express_2005数据库.doc

    3. 用户交互:在执行可能影响数据的操作时,如更新或删除,通常需要提供用户确认,避免误操作。 4. 性能优化:如果数据量很大,应考虑分批处理,以减少对数据库的频繁访问,提高性能。 总的来说,这篇文档提供了在...

    SqlServer,将多行记录按分组信息一行显示

    SqlServer将多行记录按分组信息一行显示

    sql 多行合并某一列字符串拼接的示例

    本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的技术,并通过一个具体的示例来展示这一过程。 ### SQL字符串拼接的原理 在SQL中,字符串拼接是指将多个字符串值连接成一个单一的字符串。不同...

    sql下三种批量插入数据的方法

    使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据。  代码示例:  此例子为控制台输出程序,有两个类,一个为BulkData类,主要实现了表值参数和sql...

    本Delphi源码演示TDBGrid多行数据操作..rar

    3. 多行操作:源码可能包含了批量插入、更新和删除数据的方法,这些都是通过遍历DBGrid中的行,然后执行相应的SQL语句来实现的。 4. 事件处理:通过监听TDBGrid的OnCellClick、OnEditAccept、OnEditCancel等事件,...

    oracle SQL 语句插入数据

    总之,Oracle SQL 提供了多种方式来插入数据,包括简单的单行插入、多行插入、从其他表导入以及批量导入等。根据不同的场景和需求,选择合适的方法可以更高效地管理和维护数据库中的数据。在处理大数据量时,尤其...

    C#实现批量插入sqlserver数据

    在C#编程中,批量插入数据到SQL Server数据库是一个常见的需求,特别是在处理大量数据时,效率至关重要。本篇文章将详细探讨三种不同的批量...通过读取数据并利用上述的批量插入技术,可以实现高效的数据迁移或更新。

    ACCESS和SQL批量插入数据工具

    总的来说,"ACCESS和SQL批量插入数据工具"是一个强大的辅助工具,能够有效提升数据库操作的效率,特别是在大规模数据处理和负荷测试场景下。通过对ACCESS和SQL Server的高效支持,它降低了数据管理的复杂度,为IT...

    SQL语句行数据拆成多行及多行数据合并成一行的方法.docx

    ### SQL语句行数据拆成多行及多行数据合并成一行的方法 #### 一、SQL语句对一行(单元格)数据拆分成多行 在处理数据时,有时我们需要将一行数据拆分成多行,这在数据分析和报表制作中非常常见。下面将详细介绍几...

    sqlserver中向表中插入多行数据的insert语句

    在SQL Server中,插入多行数据到一个表中通常是通过使用`INSERT`语句配合`SELECT`和`UNION ALL`或`UNION`来实现的。在SQL Server 2000中,这个功能同样适用,对于初学者来说可能会感到困扰,但一旦掌握了这种方法,...

    SQL语句实现跨Sql server数据库操作实例

    本文介绍了如何使用SQL语句实现在不同的SQL Server实例之间进行数据查询和插入操作的方法。通过具体的示例,展示了如何创建远程服务器别名、执行跨服务器查询以及进行跨服务器数据插入。此外,还介绍了如何配置SQL ...

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    一列分割成多列,多行合并为一行

    SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    30 用于存放磁盘上的多行数据的数据页到底长个什么样子.pdf

    在数据库管理系统(如MySQL)中,数据页是存储数据的基本单位,它位于磁盘上,包含了多行数据。理解数据页的结构对于深入掌握数据库的内部工作原理是非常重要的,尤其是在进行性能优化和故障排查时。接下来将详细...

Global site tag (gtag.js) - Google Analytics