`

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的多行转列的问题,这是我经过个人测试的语句。

    SQL多行变一行的方法

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

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

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

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

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

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

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

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

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

    oracle SQL 语句插入数据

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

    C#实现批量插入sqlserver数据

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

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

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

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

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

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

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

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

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

    SQL 合并多行记录的方法总汇

    SQL中合并多行记录的方法总汇: –1. 创建表,添加测试数据 CREATE TABLE tb(id int, [value] varchar(10)) INSERT tb SELECT 1, ‘aa’ UNION ALL SELECT 1, ‘bb’ UNION ALL SELECT 2, ‘aaa’ UNION ALL SELECT 2...

    labview 数据库的表格创建,数据更新,数据删除,数据查询,数据插入,数据显示。

    在LabVIEW中与数据库交互是常见的需求,本教程将详细介绍如何使用LabVIEW进行数据库的表格创建、数据更新、数据删除、数据查询以及数据插入,并展示如何显示这些数据。 首先,我们需要理解LabVIEW中的数据库接口。...

    SQL 函数 字段内容更新插入

    当我们需要更新或插入字段内容时,SQL函数就显得尤为重要。以下是一些关于如何使用SQL函数进行字段内容更新插入的关键知识点: 1. **更新字段内容**: 更新数据库表中的特定字段内容,可以使用`UPDATE`语句。基本...

    sql 中 更新,插入text类型的字段 updatetext

    sql 中 更新,插入text类型的字段 updatetext

    用java程序怎么实现200ms往数据库中插入10000条数据

    Java 实现高效数据库插入数据 在 Java 程序中,实现高效的数据库插入数据是非常重要的。以下是相关的知识点: 使用 JDBC 连接数据库 在 Java 程序中,使用 JDBC(Java Database Connectivity)连接数据库是非常...

Global site tag (gtag.js) - Google Analytics