SQL 将2张不相关的表拼接成2列,批量更新至另一张表
update SO_Master set LotteryNo=t2.LotteryNo,UpdateTime=GETDATE()
--select sm.LotteryNo,sm.SysNo,t2.LotteryNo
from SO_Master sm
inner join (
select
SysNo,ROW_NUMBER() over(order by sysno asc) rIndex
from SO_Master
where WebSiteSysNo =6 and SOAmt >=800 and LotteryNo is null AND OrderDate >='2016/09/22 00:00:00' and OrderDate<'2016/09/24 00:00:00' and Status not in(-1,-2,-3)
) t1 on t1.SysNo=sm.SysNo
inner join (
select
LotteryNo,ROW_NUMBER() over(order by sysno asc) rIndex
from SO_Master_Lottery
where status=0 and WebSiteSysNo = 6
) t2 on t1.rIndex=t2.rIndex
where sm.SysNo=1422087 and sm.LotteryNo is null
--order by t1.SysNo asc,t2.LotteryNo asc
SO_master表简称SO,SO_Master_Lottery表简称SML,
1.首先将SO表列查询出来作为更新条件,然后使用Row_Number排序获得序列
2.将SML表列查询出来作为更新值,然后使用Row_number排序获得序列
3.通过序列号将SO表和SML表关联起来,获得所需的更新条件和更新值,如下代码:
select sm.LotteryNo,sm.SysNo,t2.LotteryNo
from SO_Master sm
inner join (
select
SysNo,ROW_NUMBER() over(order by sysno asc) rIndex
from SO_Master
where WebSiteSysNo =6 and SOAmt >=800 and LotteryNo is null AND OrderDate >='2016/09/22 00:00:00' and OrderDate<'2016/09/24 00:00:00' and Status not in(-1,-2,-3)
) t1 on t1.SysNo=sm.SysNo
inner join (
select
LotteryNo,ROW_NUMBER() over(order by sysno asc) rIndex
from SO_Master_Lottery
where status=0 and WebSiteSysNo = 6
) t2 on t1.rIndex=t2.rIndex
where sm.SysNo=1422087 and sm.LotteryNo is null
order by t1.SysNo asc,t2.LotteryNo asc
4.使用批量更新的SQL执行语法,进行内连接,由更新主表SO_master表关联t1更新条件表,然后内链接t2获得更新值,t1和更新主表SO_master通过外键关联,t2是根据t1的序号关联t2的,然后加上所有查询条件,
主要是带上更新值的列LotteryNo
其他sql介绍:
下面这个Sql是按照Row_number更新数据的,仅供参考
update SO_Master set LotteryNo =t1.LotteryNo,UpdateTime=GETDATE() from SO_Master sm
inner join(
select SysNo, 168799-ROW_NUMBER()over(order by sysno asc) LotteryNo from SO_Master
where WebSiteSysNo =6 and SOAmt >=800 and LotteryNo is null AND OrderDate >='2016/09/22 00:00:00' and OrderDate<'2016/09/24 00:00:00' and Status not in(-1,-2,-3)
) t1 on sm.SysNo=t1.SysNo
where sm.LotteryNo is null
SQL 将2张不相关的表拼接成2列,批量更新至另一张表的更多相关文章
- SQL Server 将两行或者多行拼接成一行数据
一个朋友,碰到一个问题. 就是查询出来的结果集,需要每隔三行.就将这三行数据以此拼接为一行显示.起初我想着用ROW_NUMBER加CASE WHEN去做,发现结果并非我预期那样. 结果如下: 由于别人 ...
- SQL server将查询到的多行结果,拼接成字符串(列转行)
select stuff(( ,,'') as UserNamestr 注释:查询出tabname表中的UserName列的所有内容,并将内容拼接成UserNamestr
- mysql批量更新update中的锁表机制
mysql的行锁是通过索引加载的,即行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁. CREATE TABLE SIMPLE_USER( I ...
- SQL Server单表已700w+将普通表转换成分区表
最近项目中,某个表数据量爆发时增长,单表已700w+,读写性能急剧下降,所以考虑加入分区表以解燃眉之急,后续还是要分表分库,当然这是后话.下面简要说一下将普通表转为分区表的步骤. 一.创建文件组 ...
- SQL Server单表已700w+将普通表转换成分区表1
最近项目中,某个表数据量爆发时增长,单表已700w+,读写性能急剧下降,所以考虑加入分区表以解燃眉之急,后续还是要分表分库,当然这是后话.下面简要说一下将普通表转为分区表的步骤. 一.创建文件组 ...
- oracle 10g 用dbms_xmlgen将数据表转成xml格式
oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle用plsql将sql查询的所有数据导出为xml
- mysql批量update操作时出现锁表
https://www.cnblogs.com/wodebudong/articles/7976474.html 最近遇到一件锁表的情况,发现更新的语句where检索的字段,没有建索引,且是批量操作的 ...
- [原创]SQL 把表中某一个列按照逗号拼接成一行
在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据 如图:我们把UserId列拼接成一行数据 -------> 为此我写了一个存储过程来解决此类问题. -- ...
- sql 使用 FOR XML PATH实现字符串拼接
sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍. 1,把图一的转换为图二: SELECT articleID, (),tagID)+',' FROM arti ...
随机推荐
- ACM之鸡血篇
一匹黑马的诞生 故事还要从南京现场赛讲起,话说这次现场赛,各路ACM英雄豪杰齐聚南京,为争取亚洲总舵南京分舵舵主之职位,都使出了看 家本领,其中有最有实力的有京城两大帮清华帮,北大帮,南郡三大派上交派 ...
- Kinect开发资源汇总
Kinect开发资源汇总 转自: http://www.sigvc.org/bbs/forum.php?mod=viewthread&tid=254&highlight=kinec ...
- NSIS检测.NET Framework并在线下载
Section -.NET Framework ;检测是否是需要的.NET Framework版本 Call GetNetFrameworkVersion Pop $R1 ;${If} $R1 < ...
- JAVA动态加载JAR
// 生成JAR包D:\TestClass.jar package hand.java.loadjar; public class TestClass { private String sayHell ...
- UI第十九节——UICollectionView
UICollectionView其实就是UITableView的升级版,在布局方面比UITableView更出色.下面,先看代码吧 #import "RootViewController.h ...
- Javascript设计模式学习二(单例)
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 普通的单例模式: 使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象.比如:使用 ...
- spring mvc controller间跳转 重定向 传参
http://blog.csdn.net/jackpk/article/details/19121777/
- Eclipse使用Maven tomcat:run命令启动web项目时修改默认端口
- Redis学习手册(主从复制)
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理 ...
- LinuxMysql命令操作数据库
键入命令mysql -uroot -p密码查看所有表:mysql> show databases;进入表use multidomain_db;删除表:DROP table colour 执行sq ...