求条SQL语句谢谢,

talentmykaka 2009-05-27 04:43:33
T1
编码 名称 规格 金额 数量 单据号 操作员
1001 1 1*1 10 10 0001 test
1002 2 1*1 10 10 0001 test
1003 3 1*1 10 10 0001 test
1001 1 1*2 10 10 0001 test
1001 1 1*3 10 10 0001 test
T2表
1001 1 1*2 9 1
1001 1 1*3 11 3
1002 2 1*1 8 5

要求更新T2表为
1001 1 1*1 10 10
1002 2 1*1 10 15
1003 3 1*1 10 10
1001 1 1*2 10 11
1001 1 1*3 10 13

根据T1表中的编号和规格判断在T2 表中有没有,要是有则把数量加入T2表,并更新金额,没有就直接写入T2表中
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
soft_wsx 2009-05-27
  • 打赏
  • 举报
回复
--可以左连接LEFT JLIN 表名 条件   和    EXISTS 判断是否有符合条件的记录
pt1314917 2009-05-27
  • 打赏
  • 举报
回复



--更新已有的数量和金额
update t2 set 金额=b.金额,数量=a.数量+b.数量 from t2 a,t1 b
where b.编码=a.编码 and b.名称=a.名称 and b.规格=a.规格
--插入没有的数量和金额
insert into t2 select 编码,名称,规格,金额,数量 from t1 a where not exists(select 1 from t2 where 编码=a.编码 and 名称=a.名称 and 规格=a.规格)
go

水族杰纶 2009-05-27
  • 打赏
  • 举报
回复
--以上可以将查询结果放到临时表,然后清空T2表 然后将临时表的数据插入到T2表
--或者分两步,先更新,然后插入没有的
水族杰纶 2009-05-27
  • 打赏
  • 举报
回复
--T1 
DECLARE @T1 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT,单据号 VARCHAR(10),操作员 VARCHAR(10))
INSERT @T1 SELECT 1001 ,1, '1*1' ,10, 10 ,'0001', 'test'
INSERT @T1 SELECT 1002 ,2 , '1*1' , 10 , 10 ,'0001' , 'test'
INSERT @T1 SELECT 1003 ,3 , '1*1' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 1001 , 1 , '1*2' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 1001, 1 ,'1*3', 10 ,10 , '0001' ,'test'
--T2表
DECLARE @T2 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT)
INSERT @T2 SELECT 1001 ,1, '1*2' , 9 , 1
INSERT @T2 SELECT 1001 , 1 , '1*3' , 11 , 3
INSERT @T2 SELECT 1002, 2 , '1*1', 8 , 5
SELECT A.编码,A.名称,A.规格,A.金额,A.数量+ISNULL(B.数量,0) FROM @T1 A
LEFT JOIN @T2 B ON A.编码=B.编码 AND A.规格=B.规格
/*编码 名称 规格 金额
----------- ----------- ---------- ----------- -----------
1001 1 1*1 10 10
1002 2 1*1 10 15
1003 3 1*1 10 10
1001 1 1*2 10 11
1001 1 1*3 10 13
*/
y4009 2009-05-27
  • 打赏
  • 举报
回复
刚才有个错误,多打了inner
y4009 2009-05-27
  • 打赏
  • 举报
回复
update t2 set 字段跟新
insert into t2 select 相应字段 from t1 left inner join t2 where t2.编号 is null
可以试一下啊
y4009 2009-05-27
  • 打赏
  • 举报
回复
我提供一个思路,我个人认为分两步实现,第一步可以先用有外连接把t2表中没有的数据进行更新。第二步,用作外联结用insert ……select语句将t2表中没有的数据从t1中查询插入!
pt1314917 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 talentmykaka 的回复:]
引用 4 楼 wufeng4552 的回复:
SQL code--T1
DECLARE @T1 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT,单据号 VARCHAR(10),操作员 VARCHAR(10))
INSERT @T1 SELECT 1001 ,1, '1*1' ,10, 10 ,'0001', 'test'
INSERT @T1 SELECT 1002 ,2 , '1*1' , 10 , 10 ,'0001' , 'test'
INSERT @T1 SELECT 1003 ,3 , '1*1' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 100…
[/Quote]
那就先修改已有的,然后再插入没有的。
如6楼。其实这样效率不一定要比4楼的高。
talentmykaka 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wufeng4552 的回复:]
SQL code--T1
DECLARE @T1 TABLE(编码 INT,名称 INT,规格 VARCHAR(10),金额 INT,数量 INT,单据号 VARCHAR(10),操作员 VARCHAR(10))
INSERT @T1 SELECT 1001 ,1, '1*1' ,10, 10 ,'0001', 'test'
INSERT @T1 SELECT 1002 ,2 , '1*1' , 10 , 10 ,'0001' , 'test'
INSERT @T1 SELECT 1003 ,3 , '1*1' , 10 , 10 , '0001' , 'test'
INSERT @T1 SELECT 1001 , 1 , '1*2' , 10 ,…
[/Quote]

这个语句感觉效果不高,我如何改变T2表中的数据呢?得到结果后,清空T2表,然后插入?要是这样的话,我T2标数据比较多并访问也比较多的时候,岂不是不停的删除和插入?
ch315537 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wufeng4552 的回复:]
SQL code--T1DECLARE@T1TABLE(编码INT,名称INT,规格VARCHAR(10),金额INT,数量INT,单据号VARCHAR(10),操作员VARCHAR(10))INSERT@T1SELECT1001,1,'1*1',10,10,'0001','test'INSERT@T1SELECT1002,2,'1*1',10,10,'0001','test'INSERT@T1SELECT1003,3,'1*1',10,10,'0001','test'INSERT@T1SELECT1001,1,'1*2',10,10,'0001','test'INSERT@T1SELECT1001,1,'1*3',10,10,'0001','test'--T2表DECLARE@T2TABLE(编码INT,名称INT,规格VARCHAR(1…
[/Quote]
学习了,顶
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) http://download.csdn.net/source/3268312 内容简介   本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sql和pl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sql和pl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏块  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) http://download.csdn.net/source/3268312 内容简介   本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sql和pl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sql和pl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏块  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧