现在有一个表,如何求这个表的总和,相同的订单号其它费用只计算一次!!
比如
订单号  商品名称  价格 其它费用
001     a       1     1
001     b       2     1
001     c       5     1
001     d       2     1
002     a       1     2
002     b       2     2请001 和 002两个订单号的总金额是多少!!其中同一个订单号的[其它费用]只收一次!!比如001的其它费用是1元而不是四个商品加起来4的费用!!SUM=1+2+5+2+1+1+2+2这个是两个订单号的和,请问要SQL要怎么计算呢!!在同一个订单号只计算其它费用用1次就可以了!!
     红色是商品的金额  其它是其它费用

解决方案 »

  1.   

    select 
      订单号,
      sum(价格)+max(其它费用) as 总金额
    from tb
    group by 订单号
      

  2.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([订单号] varchar(3),[商品名称] varchar(1),[价格] int,[其它费用] int)
    insert [tb]
    select '001','a',1,1 union all
    select '001','b',2,1 union all
    select '001','c',5,1 union all
    select '001','d',2,1 union all
    select '002','a',1,2 union all
    select '002','b',2,2
     
    ---查询---
    select 
      订单号,
      sum(价格)+max(其它费用) as 总金额
    from tb
    group by 订单号---结果---
    订单号  总金额         
    ---- ----------- 
    001  11
    002  5(所影响的行数为 2 行)
      

  3.   

    我是要求出这个两个订单的和
    比如1+2+5+2+1+1+2+2=16还不是要这个两个订单分别求出来!!
    用SQL的结果是16
      

  4.   

    两个订单的总金额---查询---
    select sum(总金额) as 总金额
    from (
    select 订单号,sum(价格)+max(其它费用) as 总金额 from tb group by 订单号)t
    ---结果---
    总金额         
    ----------- 
    16(所影响的行数为 1 行)
      

  5.   

    ---------------------------------
    --  Author: liangCK 小梁
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (订单号 VARCHAR(3),商品名称 VARCHAR(1),价格 INT,其它费用 INT)
    INSERT INTO @T
    SELECT '001','a',1,1 UNION ALL
    SELECT '001','b',2,1 UNION ALL
    SELECT '001','c',5,1 UNION ALL
    SELECT '001','d',2,1 UNION ALL
    SELECT '002','a',1,2 UNION ALL
    SELECT '002','b',2,2--SQL查询如下:SELECT (
              SELECT SUM(价格)
              FROM @T
           )
           +
           (
              SELECT
                  SUM(其它费用)
              FROM @T AS A
              WHERE 商品名称 IN(SELECT TOP 1 商品名称 FROM @T WHERE A.订单号=订单号)
           )/*
    -----------
    16(1 行受影响)
    */
      

  6.   

    select sum(a) as b from (
    select order_code,max(bz) as a from [order] group by order_code) 这样子好像不行吧!!
      

  7.   


    create table tt(id varchar(10),
                  name varchar(10),
                  p1   int,
                  p2  int);
    go
    insert  into tt(id,name,p1,p2)
     select '001','a',1,1
     union
     select '001','b',2,1
     union
     select '001','c',5,1
     union
     select '001','d',2,1
     union
     select '002','a',1,2
     union
     select '002','b',2,2
    go
    select sum(aa.金额)  as 总金额
    from (select 
      id,
      sum(p1)+max(p2) as 金额
    from tt
    group by id) aa