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 关联字段不能更新 字段)
分享到:
相关推荐
在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...
多行数据一行显示多行数据一行显示多行数据一行显示多行数据一行显示
SQL 字符串分割函数实现多行数据转换 在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个...
主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。
在数据库管理中,INSERT语句是用于...总之,使用INSERT语句插入多行数据是数据库操作中的常用技巧,它提高了数据输入的效率,尤其是在处理大量数据时。熟练掌握这一技能对于任何数据库管理员或开发人员来说都至关重要。
SQL方法,将一列中的多行变为一行,将按一定条件筛查出来的多行数据变为一行数据
3. 用户交互:在执行可能影响数据的操作时,如更新或删除,通常需要提供用户确认,避免误操作。 4. 性能优化:如果数据量很大,应考虑分批处理,以减少对数据库的频繁访问,提高性能。 总的来说,这篇文档提供了在...
SqlServer将多行记录按分组信息一行显示
本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的技术,并通过一个具体的示例来展示这一过程。 ### SQL字符串拼接的原理 在SQL中,字符串拼接是指将多个字符串值连接成一个单一的字符串。不同...
使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据。 代码示例: 此例子为控制台输出程序,有两个类,一个为BulkData类,主要实现了表值参数和sql...
3. 多行操作:源码可能包含了批量插入、更新和删除数据的方法,这些都是通过遍历DBGrid中的行,然后执行相应的SQL语句来实现的。 4. 事件处理:通过监听TDBGrid的OnCellClick、OnEditAccept、OnEditCancel等事件,...
总之,Oracle SQL 提供了多种方式来插入数据,包括简单的单行插入、多行插入、从其他表导入以及批量导入等。根据不同的场景和需求,选择合适的方法可以更高效地管理和维护数据库中的数据。在处理大数据量时,尤其...
在C#编程中,批量插入数据到SQL Server数据库是一个常见的需求,特别是在处理大量数据时,效率至关重要。本篇文章将详细探讨三种不同的批量...通过读取数据并利用上述的批量插入技术,可以实现高效的数据迁移或更新。
总的来说,"ACCESS和SQL批量插入数据工具"是一个强大的辅助工具,能够有效提升数据库操作的效率,特别是在大规模数据处理和负荷测试场景下。通过对ACCESS和SQL Server的高效支持,它降低了数据管理的复杂度,为IT...
### SQL语句行数据拆成多行及多行数据合并成一行的方法 #### 一、SQL语句对一行(单元格)数据拆分成多行 在处理数据时,有时我们需要将一行数据拆分成多行,这在数据分析和报表制作中非常常见。下面将详细介绍几...
在SQL Server中,插入多行数据到一个表中通常是通过使用`INSERT`语句配合`SELECT`和`UNION ALL`或`UNION`来实现的。在SQL Server 2000中,这个功能同样适用,对于初学者来说可能会感到困扰,但一旦掌握了这种方法,...
本文介绍了如何使用SQL语句实现在不同的SQL Server实例之间进行数据查询和插入操作的方法。通过具体的示例,展示了如何创建远程服务器别名、执行跨服务器查询以及进行跨服务器数据插入。此外,还介绍了如何配置SQL ...
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
在数据库管理系统(如MySQL)中,数据页是存储数据的基本单位,它位于磁盘上,包含了多行数据。理解数据页的结构对于深入掌握数据库的内部工作原理是非常重要的,尤其是在进行性能优化和故障排查时。接下来将详细...