求一条比较复杂的sql语句

uxspy 2009-03-05 05:38:45
触发器,要求:订单完成时增加用户积分
涉及到的表

1.订单状态表
订单ID,订单状态(1,2,3,4,其中4为订单完成的标识)[只要订单状态发生改变,就往这个表里添加一条记录,而不是更新相应记录]
2.订单表
订单明细ID
3.订单明细表
产品ID,产品数量
4.产品表
point:积分
5.用户表
totalpoint:这个用户的总积分

规则:订单A完成后,totalpoint=totalpoint+(A.明细1.(产品积分*产品数量)+A.明细2.(产品积分*产品数量)+.....)

实话实说,刚才连表,给我连晕了,有种想吐的感觉,50分送上,如果要求,还可再加
...全文
58 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
uxspy 2009-03-05
  • 打赏
  • 举报
回复
OK,有反映了~~~~~我检查下结果正确不~~~感谢两位~~~
uxspy 2009-03-05
  • 打赏
  • 举报
回复
???很奇怪,您的引用回复里怎么会有一个i.status=4???,您的第一个回复里是没有的
uxspy 2009-03-05
  • 打赏
  • 举报
回复
to:happyflystone
我试着改写为

create trigger AddUserPoint
on [OrderStatus]
for insert
as
begin
update u
set [Point] = [Point] + isnull(f,0)
from [user] u ,(
select i.[OrderID],[UserID],sum( [Point]*[Quantity]) as f
from inserted i,[Order] o,[OrderDetail] od,[Product] p
where i.[OrderID] = o.[OrderID] and o.[OrderID] = od.[OrderID] and od.[ProID] = p.[ProID]
group by i.[OrderID],[UserID])g
where u.[UserID] = g.[UserID]
end


添加了一条记录,但是没发现有什么效果~~
-狙击手- 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
create trigger tr_i
on 订单状态表
for insert
as
begin
update e
set totalpoint = totalpoint + isnull(f,0)
from 用户表 e ,(
select i.订单ID,用户,sum( 产品积分*产品数量) as f
from inserted i,订单表 a,订单明细表 b,产品表 c
where i.订单ID = a.订单ID and a.订单ID = b.订单ID and b.产品ID = c.产品ID and i.订单状态 = 4
group by i.订单ID,用户)g
where e.用户 = g.用户
end

[/Quote]



create trigger tr_i
on 订单状态表
for insert
as
begin
update e
set totalpoint = totalpoint + isnull(f,0)
from 用户表 e ,(
select i.订单ID,用户,sum( 产品积分*产品数量) as f
from inserted i,订单表 a,订单明细表 b,产品表 c
where i.订单ID = a.订单ID and a.订单ID = b.订单ID and b.产品ID = c.产品ID and
group by i.订单ID,用户)g
where e.用户 = g.用户
end

昵称被占用了 2009-03-05
  • 打赏
  • 举报
回复
create trigger tr_订单状态表_insert
on 订单状态表
for insert
as

update 用户表 set
totalpoint=用户表.totalpoint+t.point
from 用户表 inner join (
select
订单表.用户ID
,sum(产品表.point*订单明细表.产品数量) as point
from inserted i
inner join 订单表
on i.订单ID = 订单表.订单ID
inner join 订单明细表
on 订单明细表.订单明细ID=订单表.订单明细ID
inner join 产品表
on 产品表.产品ID=订单明细表.产品ID
where i.订单状态 = 4
group by 订单表.用户ID
) as t
on 用户表.用户ID = t.用户ID

go

-狙击手- 2009-03-05
  • 打赏
  • 举报
回复
create trigger tr_i
on 订单状态表
for insert
as
begin
update e
set totalpoint = totalpoint + isnull(f,0)
from 用户表 e ,(
select i.订单ID,用户,sum( 产品积分*产品数量) as f
from inserted i,订单表 a,订单明细表 b,产品表 c
where i.订单ID = a.订单ID and a.订单ID = b.订单ID and b.产品ID = c.产品ID
group by i.订单ID,用户)g
where e.用户 = g.用户
end
go

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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