有订单详细信息表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统计也行

解决方案 »

  1.   

    只会用SQL统计,当JIAO点移动时,触发详细信息,等高人来吧
      

  2.   

    根据订单编号分组,用sum()求和,然后插入t_order_info表
      

  3.   

    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 订单编号 
      

  4.   


    还是用视图吧,把统计的SQL定义成视图
      

  5.   


    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.订单编号
      

  6.   

    是不是
    总优惠价格=sum(优惠价格*优惠数量)
      

  7.   

    难道是这样?create table T_Order_Detail(订单编号 varchar(20),数量 int,价格 int,优惠数量 int,优惠价格 int,运费 int,订单总金额 int,是否搭销 varchar(20),是否赠品 varchar(20));
    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 行受影响)
      

  8.   

    触发器(算法可能理解错误,自己多检查):CREATE TRIGGER TR_T_Order_Detail
    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.订单编号 
    )
      

  9.   

    这个是用触发器的.create table T_Order_Detail(订单编号 varchar(20),数量 int,价格 int,优惠数量 int,优惠价格 int,运费 int,订单总金额 int,是否搭销 varchar(20),是否赠品 varchar(20));
    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 行受影响)
      

  10.   

    使用视图的例子.create table T_Order_Detail(订单编号 varchar(20),数量 int,价格 int,优惠数量 int,优惠价格 int,运费 int,订单总金额 int,是否搭销 varchar(20),是否赠品 varchar(20));
    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 行受影响)
      

  11.   


    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 订单编号