关于从明细表累计数据到主档表的问题

rudygod 2010-01-17 06:04:20
比如说出货主表与出货明细:
出货明细表新增,删除,修改,则每个出货单相应数量可能有变化,是在应用程序中写还是在服务器上写触发器好,能做个例么

出货主表 主键(fact,odr_no)
fact odr_no odr_qty pro_qty shp_qty
varchar(3) varchar(20) decimal(7,0) decimal(7,0) decimal(7,0)

出货明细表 主键(fact,odr_no,sizerun) (一个 odr_no 可以对应多个 sizerun)
fact odr_no sizerun odr_tqty pro_tqty shp_tqty
varchar(3) varchar(20) varchar(5) decimal(7,0) decimal(7,0) decimal(7,0)
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sql77 的回复:]
直接创建外键关联,级联删除更新就行
[/Quote]
还要统计数据呀,这样不行,
参考触发器


主表 SALE_MAIN
SNO NUM
001
002

从表 SALE_SUB
sno num_sub
001 10
001 20
001 13
002 3
002 5

当从表添加、删除、修改时候,要触发主表,保证NUM的总数等于从表的num_sub之和


sgtzzc

(四方城)

等 级:
#1楼 得分:0回复于:2010-01-12 23:12:33SQL codecreate trigger tri_sale_sub
on sale_sub
for insert,update,delete
as
if not exists(select 1 from inserted i,sale_main m where i.sno=m.sno)
begin
insert sale_main
select sno,sum(num_sub) from inserted group by sno
end
else
begin
update a
set a.num=a.num+b.num
from
sale_main a,
(select sno,sum(num) as num
from
(select sno,num_sub as num from inserted
union all
select sno,-num_sub as num from deleted
)a
group by sno
)b
where a.sno=b.sno
end


rudygod 2010-01-17
  • 打赏
  • 举报
回复
select sum(odr_tqty)'o_qty',sum(pro_tqty)'i_qty',sum(shp_tqty)'o_qty'
from inserted ,ori_odrd
where ori_odrd.odr_no = inserted.odr_no
update ori_odrm
set odr_qty = o_qty,pro_qty=i_qty,shp_qty= o_qty
where ori_odrm.fact=ori_odrd.fact and ori_odrm.odr_no = ori_odrd.odr_no


这样行不?
ACMAIN_CHM 2010-01-17
  • 打赏
  • 举报
回复
写触发器比较好。
集中在数据库端完成,这样可以减少你不同程序模块中的修改。


但本身这种表设计并不合理。主表根本不需要 odr_qty pro_qty shp_qty 这几个字段,直接从 细表 中用查询获取就可以了。
SQL77 2010-01-17
  • 打赏
  • 举报
回复
直接创建外键关联,级联删除更新就行

34,873

社区成员

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

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