首页 新闻 搜索 专区 学院

存储过程写法

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-08-20 09:38

一个表A示原数据表;一表B中的数据是A表的拆分,将拆分后的数据插入到表A中,然后删除A表中的该条老数据。
主要拆分是A表中的一个数量(将数量拆分成不等的份儿,还有一个C字段是变化,其余字段值不变)

 

例如:

表A

ID    Qty     Name     BillNo

1      20      Kitty      130816

 

表B

ID    Qty    Name     BillNo

1      10     Cate      130816

2      10     Lily        130816

 

将表B中的两条复制到表A中,将表A中的那条老数据删除,该存储过程怎么写

lydiamiao的主页 lydiamiao | 初学一级 | 园豆:89
提问于:2013-08-16 11:05
< >
分享
所有回答(1)
0

你应该还有一张表,就是说明130816 和 Kitty

--删除A表数据
delete from A where exists(select 1 from B where A.BillNo=B.BillNo);

--插入数据
insert into A
select row_number() over(order by BillNo)  as id,Qty,C.Name ,A.BillNo
from (select BillNo,Sum(Qty) from B group by BillNo) A
left join C on A.BillNo=C.BillNo

kylin.chen | 园豆:983 (小虾三级) | 2013-08-16 11:50

130816,对的,是另一个表里的数据,跟A表有关联

 

Kitty只是数据,没什么意义的,在B表拆分的时候值变了而已

支持(0) 反对(0) lydiamiao | 园豆:89 (初学一级) | 2013-08-16 12:26

@lydiamiao: 稍微改动一下就可以用了,这个很简单的。

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2013-08-16 12:34

@kylin.chen: 那如果A表中很多字段,B表中只有这几个,且B表中也就这几个需要更新到A表中,A表中其余的保持不变怎么做……

支持(0) 反对(0) lydiamiao | 园豆:89 (初学一级) | 2013-08-16 13:53

@lydiamiao: 上面那个删除语句不要,把下面的insert语句更换为update语句,update语句类似:update A set A.name=B.name from A left join B on A.Id=B.Id where A.BillNo='123'

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2013-08-16 15:22

@kylin.chen: 最后要的结果是A表中两条新的数据

支持(0) 反对(0) lydiamiao | 园豆:89 (初学一级) | 2013-08-16 15:56

@lydiamiao: 不明白?

支持(0) 反对(0) kylin.chen | 园豆:983 (小虾三级) | 2013-08-16 15:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册