我已经知道怎么建JOB了。现在还有一个问题,就是一个订单500元,可能因为某些商品无货而被拆分成2个订单,新拆的订单会在原订单号后面加个-C。这样等于就分成2个不到500元的订单了。这时就需要汇总2个订单的金额,大于500元的就处理升级为VIP。现在就是不知道应该怎么写sql语句去汇总金额。订单号字段是ordernum、
下面是我写的没有汇中拆分订单金额的SQL语句,大家看看能不能做到汇总。
UPDATE a SET isVIP = 1,isvip_date=getdate(),isvip_date_s=getdate()+12*30
FROM custom as a INNER JOIN orderlist as b
on a.userid = b.userid
WHERE b.state=9 and b.sumprice >= 500 and b.datetime <=getdate()-15
and a.isVIP = 0
UPDATE a SET isVIP = 1,isvip_date=getdate(),isvip_date_s=getdate()+12*30
FROM custom as a INNER JOIN orderlist as b
on a.userid = b.userid
WHERE b.state=9 and
(select sum(sumprice) from orderlist where userid = b.userid and
replace(订单号,'-c','') = replace(b.订单号,'-c','')) >= 500
and b.datetime <=getdate()-15
and a.isVIP = 0
--建立触发器
--名称:tr_tbOrder
--功能:当有用户的金额>=500时,自动确定他何时会成为会员,存放到IsLeaguer中
CREATE TRIGGER tr_tbOrder
ON tbOrder
FOR INSERT, UPDATE
AS
If UPDATE(sumprice)
BEGIN
declare @sStr Nvarchar(100),@dDate datetime
select @dDate = dateadd(day,15,getdate())
select @sStr = username from inserted
--更新:通过匹配用户名,金额和是否已经成为会员来确定更新
exec('update tbOrder set IsLeaguer = ''' + @dDate + ''' where username = ''' + @sStr + ''' and sumprice >= 500 and IsLeaguer is NULL')
END
go
--放入测试数据
insert into tbOrder(username,sumprice) select 'aa',500
insert into tbOrder(username,sumprice) select 'bb',600
insert into tbOrder(username,sumprice) select 'cc',400
go
--演示,IsLeaguer字段的日期<=当前时间的就是已经成为会员的
select * from tbOrder where IsLeaguer <= getdate()
go
--建立触发器
--名称:tr_tbOrder
--功能:当有用户的金额>=500时,自动确定他何时会成为会员,存放到IsLeaguer中
CREATE TRIGGER tr_tbOrder
ON tbOrder
FOR INSERT, UPDATE
AS
If UPDATE(sumprice)
BEGIN
declare @sStr Nvarchar(100),@dDate datetime
select @dDate = dateadd(day,15,getdate())
select @sStr = username from inserted
exec('update tbOrder set IsLeaguer = ''' + @dDate + ''' where username = ''' + @sStr + ''' and sumprice >= 500')
END
go
--放入测试数据
insert into tbOrder(username,sumprice) select 'aa',500
insert into tbOrder(username,sumprice) select 'bb',600
insert into tbOrder(username,sumprice) select 'cc',400
go
--演示,IsLeaguer字段的日期<=当前时间的就是已经成为会员的
select * from tbOrder where IsLeaguer <= getdate()
go