日期:2014-05-18  浏览次数:20600 次

sql导数据
现在需要把旧数据导导新表中

旧表
其中的字段比较多就是订单和订单明细还有发货信息都放在一起了
order(订单表)
发货单ID 收货单ID 商品ID 数量
FH001 DD857 P852 22
FH001 DD857 P215 4
FH001 DD857 P658 6
FH002 DD872 P333 12
FH002 DD872 P853 6

新表
T_PdSend(发货单表)
发货单ID 收货单ID 总数量
FH001 DD857 32
FH002 DD872 18

T_SendMince(发货单明细)
发货单 商品ID 数量
FH001 P852 22
FH001 P215 4
FH001 P658 6  
FH002 P333 12
FH002 P853 3

要实现的功能order表中已生成发货单的数据导到PdSend和SendMince中
我已实现思路是

从旧表中取出数据后逐条遍历(使用游标)操作感觉太繁琐
希望大家分析一下有什么更简便的方法






------解决方案--------------------
begin tran
 insert into T_PdSend(发货单ID,收货单ID,总数量)
select 发货单ID,收货单ID,sum(数量) from [order] where 发货单ID not in (select 发货单ID from T_PdSend) group by 发货单ID,收货单ID

 insert into T_SendMince(发货单,商品ID,数量 )
select 发货单ID, 商品ID ,数量 from [order] where not exists(select * from T_SendMince where 发货单ID=[order].发货单ID and 商品ID =[order].商品ID )

if @@error=0
commit
else
rollback

------解决方案--------------------

declare @time smalldatetime
declare @year int
declare @month int
declare @day int

--select @time=dateadd(day,-1,getdate()) --获得当天时间,因为执行时已过半夜所以减1
select @time=dateadd(day,-1,'2008-10-8') --测试使用
select @year=year(@time)
select @month=month(@time)
select @day=day(@time)

select
 fhdh --发货单号
,dingdan --订单号
,shouhuoname --收货人
,usertel --电话
,youbian --邮编
,shouhuodizhi --收货地址
,actiondate --购货时间
,fhsj --发货时间
,dianpuuser --店名
,sum(bookcount) --单笔商品购买数量
,bookid --商品ID
from orders
where --当天生成的发货单
fhdh is not null and fhdh <>'' 
and year(actiondate)=@year
and month(actiondate)=@month
and day(actiondate)=@day
and fhdh not in (select fhdh from orders)
group by fhdh,dingdanshouhuoname ,usertel ,youbian,shouhuodizhi,actiondate,fhsj,dianpuuser,bookid
order by actiondate

这样可以吗?