有订单详细信息表T_Order_Detail
订单编号 数量 价格 优惠数量 优惠价格 运费 订单总金额 是否搭销 是否赠品
DD001 1 10 2 5 5 25 是 否
DD001 1 10 2 5 5 25 否 是
DD001 1 30 2 5 5 45 否 否
DD002 1 10 2 5 5 25 否 否
DD002 1 10 2 5 5 25 否 是
DD002 1 20 2 5 5 35 否 否
想得到某个订单的订单详细信息 如:下面是订单表T_Order_Info
订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额(不包含运费) 赠品总数量 总金额
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85如果能用触发器实现那最好 就是当有订单详细信息生成就自动统计出订单表的信息,如果不能就用SQL统计也行
订单编号 数量 价格 优惠数量 优惠价格 运费 订单总金额 是否搭销 是否赠品
DD001 1 10 2 5 5 25 是 否
DD001 1 10 2 5 5 25 否 是
DD001 1 30 2 5 5 45 否 否
DD002 1 10 2 5 5 25 否 否
DD002 1 10 2 5 5 25 否 是
DD002 1 20 2 5 5 35 否 否
想得到某个订单的订单详细信息 如:下面是订单表T_Order_Info
订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额(不包含运费) 赠品总数量 总金额
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85如果能用触发器实现那最好 就是当有订单详细信息生成就自动统计出订单表的信息,如果不能就用SQL统计也行
SUM(价格) AS 总价格 ,
SUM(优惠数量) AS 总优惠数量,
SUM(优惠价格) AS 总优惠价格,
SUM(运费) AS 总运费 ,
SUM(case when 是否搭销='是' then 1 else 0 end) AS 搭销总数量 ,
SUM(case when 是否搭销='是' then 价格*优惠数量 else 0 end) AS 搭销总金额(不包含运费),
SUM(case when 是否赠品='是' then 1 else 0 end) AS 赠品总数量 ,
SUM(订单总金额) AS 总金额
FROM TB
GROUP BY 订单编号
还是用视图吧,把统计的SQL定义成视图
insert into T_Order_Info
select 订单编号,sum(数量) 总数量 ,sum(数量*价格) 总价格 ,sum(优惠数量) 总优惠数量,sum(优惠数量*优惠价格) 总优惠价格,
sum(运费) 总运费,sum( case when 是否搭销='是' then 数量 else 0 end) 搭销总金额(不包含运费)sum( case when 是否搭销='是' then 数量*价格 else 0 end ),sum(case when 是否赠品='是' then 数量 else 0 end) 赠品总数量,
sum(数量*价格+优惠数量*优惠价格+运费) 总金额group by 订单编号 from T_Order_Detailwhere 订单编号 not in(select 订单编号 from T_Order_Info)
update T_Order_Info set 总数量=b.总数量,总价格=b.总价格,...总金额=b.总金额
from T_Order_Info a,
(select 订单编号,sum(数量) 总数量 ,sum(数量*价格) 总价格 ,sum(优惠数量) 总优惠数量,sum(优惠数量*优惠价格) 总优惠价格,
sum(运费) 总运费,sum( case when 是否搭销='是' then 数量 else 0 end) 搭销总金额(不包含运费)sum( case when 是否搭销='是' then 数量*价格 else 0 end ),sum(case when 是否赠品='是' then 数量 else 0 end) 赠品总数量,
sum(数量*价格+优惠数量*优惠价格+运费) 总金额group by 订单编号 from T_Order_Detail) bwhere a.订单编号=b.订单编号
总优惠价格=sum(优惠价格*优惠数量)
go
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'是','否')
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD001',1,30,2,5,5,45,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD002',1,20,2,5,5,35,'否','否')
go
create table T_Order_Info(订单编号 varchar(20),总数量 int,总价格 int,总优惠数量 int,总优惠价格 int,总运费 int,搭销总数量 int,搭销总金额不包含运费 int,赠品总数量 int,总金额 int);
go
insert into T_Order_Info values('DD001',3,50,6,30,15,1,20,1,95)
insert into T_Order_Info values('DD002',3,40,6,30,15,0,0,1,85)
go
select * from T_Order_Info
select * from T_Order_Detail;
select 订单编号,sum(数量) as '总数量',sum(价格) as '总价格',sum(优惠数量) as '总优惠数量',sum(优惠价格*优惠数量) as '总优惠价格',sum(运费) as '总运费',sum(case 是否搭销 when '是' then 1 else 0 end) as '搭销总数量',sum(case 是否搭销 when '是' then 订单总金额-优惠价格 else 0 end) as '搭销总金额不包含运费',sum(case 是否赠品 when '是' then 1 else 0 end) as '赠品总数',sum(价格+优惠价格*优惠数量+运费) from t_order_detail group by 订单编号
go
drop table T_Order_Info,T_Order_Detail;
go--结果订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额不包含运费 赠品总数量 总金额
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85(2 行受影响)订单编号 数量 价格 优惠数量 优惠价格 运费 订单总金额 是否搭销 是否赠品
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- -------------------- --------------------
DD001 1 10 2 5 5 25 是 否
DD001 1 10 2 5 5 25 否 是
DD001 1 30 2 5 5 45 否 否
DD002 1 10 2 5 5 25 否 否
DD002 1 10 2 5 5 25 否 是
DD002 1 20 2 5 5 35 否 否(6 行受影响)订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额不包含运费 赠品总数
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85(2 行受影响)
ON T_Order_Detail
FOR INSERT,DELETE,UPDATE
AS
SELECT 订单编号 ,SUM(数量) AS 总数量 ,
SUM(价格*数量) AS 总价格 ,
SUM(优惠数量) AS 总优惠数量,
SUM(优惠价格*优惠数量) AS 总优惠价格,
SUM(运费) AS 总运费 ,
SUM(case when 是否搭销='是' then 数量 else 0 end) AS 搭销总数量 ,
SUM(case when 是否搭销='是' then 数量*价格+优惠数量*优惠价格 else 0 end) AS [搭销总金额(不包含运费)],
SUM(case when 是否赠品='是' then 数量 else 0 end) AS 赠品总数量 ,
SUM(订单总金额) AS 总金额
into #t
FROM (
select 订单编号,数量,价格,优惠数量,优惠价格,运费,订单总金额,是否搭销,是否赠品
from inserted
union all
select 订单编号,-数量,价格,-优惠数量,优惠价格-,运费,-订单总金额,是否搭销,是否赠品
from deleted
) as t
GROUP BY 订单编号 update o set
总数量 =o.总数量+t.总数量,
总价格 =o.总价格+t.总价格,
总优惠价格 =o.总优惠价格+t.总优惠价格,
总运费 =o.总运费+t.总运费,
搭销总数量 =o.搭销总数量+t.搭销总数量,
[搭销总金额(不包含运费)] =o.[搭销总金额(不包含运费)]+t.[搭销总金额(不包含运费)],
赠品总数量 =o.赠品总数量+t.赠品总数量,
总金额 =o.总金额+t.总金额
from T_Order_Info o,#t t
where o.订单编号 =t.订单编号 insert T_Order_Info (
订单编号 ,
总数量 ,
总价格 ,
总优惠价格 ,
总运费 ,
搭销总数量 ,
[搭销总金额(不包含运费)] ,
赠品总数量 ,
总金额 )
select
订单编号 ,
总数量 ,
总价格 ,
总优惠价格 ,
总运费 ,
搭销总数量 ,
[搭销总金额(不包含运费)] ,
赠品总数量 ,
总金额
from #t t
where not exists (
select 1
from T_Order_Info o
where o.订单编号 =t.订单编号
)
go
create table T_Order_Info(订单编号 varchar(20),总数量 int,总价格 int,总优惠数量 int,总优惠价格 int,总运费 int,搭销总数量 int,搭销总金额不包含运费 int,赠品总数量 int,总金额 int);
go
create trigger t_1
on t_order_detail
for insert,update,delete
as
delete from t_order_info where 订单编号=(select 订单编号 from inserted)
insert into t_order_info select 订单编号,sum(数量) as '总数量',sum(价格) as '总价格',sum(优惠数量) as '总优惠数量',sum(优惠价格*优惠数量) as '总优惠价格',sum(运费) as '总运费',sum(case 是否搭销 when '是' then 1 else 0 end) as '搭销总数量',sum(case 是否搭销 when '是' then 订单总金额-优惠价格 else 0 end) as '搭销总金额不包含运费',sum(case 是否赠品 when '是' then 1 else 0 end) as '赠品总数',sum(价格+优惠价格*优惠数量+运费) from t_order_detail where 订单编号=(select 订单编号 from inserted) group by 订单编号
go
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'是','否')
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD001',1,30,2,5,5,45,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD002',1,20,2,5,5,35,'否','否')
go
--insert into T_Order_Info values('DD001',3,50,6,30,15,1,20,1,95)
--insert into T_Order_Info values('DD002',3,40,6,30,15,0,0,1,85)
--go
select * from T_Order_Info
select * from T_Order_Detail;
select 订单编号,sum(数量) as '总数量',sum(价格) as '总价格',sum(优惠数量) as '总优惠数量',sum(优惠价格*优惠数量) as '总优惠价格',sum(运费) as '总运费',sum(case 是否搭销 when '是' then 1 else 0 end) as '搭销总数量',sum(case 是否搭销 when '是' then 订单总金额-优惠价格 else 0 end) as '搭销总金额不包含运费',sum(case 是否赠品 when '是' then 1 else 0 end) as '赠品总数',sum(价格+优惠价格*优惠数量+运费) from t_order_detail group by 订单编号
go
drop trigger t_1;
go
drop table T_Order_Info,T_Order_Detail;
go--结果
订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额不包含运费 赠品总数量 总金额
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85(2 行受影响)订单编号 数量 价格 优惠数量 优惠价格 运费 订单总金额 是否搭销 是否赠品
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- -------------------- --------------------
DD001 1 10 2 5 5 25 是 否
DD001 1 10 2 5 5 25 否 是
DD001 1 30 2 5 5 45 否 否
DD002 1 10 2 5 5 25 否 否
DD002 1 10 2 5 5 25 否 是
DD002 1 20 2 5 5 35 否 否(6 行受影响)订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额不包含运费 赠品总数
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85(2 行受影响)
go
create View v_Order_Info
as
select 订单编号,sum(数量) as '总数量',sum(价格) as '总价格',sum(优惠数量) as '总优惠数量',sum(优惠价格*优惠数量) as '总优惠价格',sum(运费) as '总运费',sum(case 是否搭销 when '是' then 1 else 0 end) as '搭销总数量',sum(case 是否搭销 when '是' then 订单总金额-优惠价格 else 0 end) as '搭销总金额不包含运费',sum(case 是否赠品 when '是' then 1 else 0 end) as '赠品总数',sum(价格+优惠价格*优惠数量+运费) as '总金额' from t_order_detail group by 订单编号
go
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'是','否')
insert into T_Order_Detail values('DD001',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD001',1,30,2,5,5,45,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','否')
insert into T_Order_Detail values('DD002',1,10,2,5,5,25,'否','是')
insert into T_Order_Detail values('DD002',1,20,2,5,5,35,'否','否')
go
select * from T_Order_Detail;
select * from v_Order_Info
go
drop view v_Order_Info;
drop table T_Order_Detail;
go--结果
订单编号 数量 价格 优惠数量 优惠价格 运费 订单总金额 是否搭销 是否赠品
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- -------------------- --------------------
DD001 1 10 2 5 5 25 是 否
DD001 1 10 2 5 5 25 否 是
DD001 1 30 2 5 5 45 否 否
DD002 1 10 2 5 5 25 否 否
DD002 1 10 2 5 5 25 否 是
DD002 1 20 2 5 5 35 否 否(6 行受影响)订单编号 总数量 总价格 总优惠数量 总优惠价格 总运费 搭销总数量 搭销总金额不包含运费 赠品总数 总金额
-------------------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
DD001 3 50 6 30 15 1 20 1 95
DD002 3 40 6 30 15 0 0 1 85(2 行受影响)
SELECT 订单编号 ,SUM(数量) AS 总数量 ,
SUM(价格) AS 总价格 ,
SUM(优惠数量) AS 总优惠数量,
SUM(优惠价格) AS 总优惠价格,
SUM(运费) AS 总运费 ,
SUM(case when 是否搭销='是' then 1 else 0 end) AS 搭销总数量 ,
SUM(case when 是否搭销='是' then 价格*优惠数量 else 0 end) AS 搭销总金额(不包含运费),
SUM(case when 是否赠品='是' then 1 else 0 end) AS 赠品总数量 ,
SUM(订单总金额) AS 总金额
FROM TB
GROUP BY 订单编号