有如下数据表单号        日期          名称    数量     金额
13020101   2013-2-1     电脑    20      66000
13020101   2013-2-1     赠品A   10      600
13020202   2013-2-2     手机    20      66000
13020202   2013-2-2     赠品B   5       300
13020303   2013-2-3     手机     3      9900
13020404   2013-2-4     电脑     2      6600
想把赠品的数量和金额合并到主商品上,结果如下单号        日期          名称   数量     金额
13020101   2013-2-1     电脑   30      66600
13020202   2013-2-2     手机   25      66300
13020303   2013-2-3     手机    3      9900
13020404   2013-2-4     电脑    2      6600

解决方案 »

  1.   

    可以啊----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-02-22 16:42:00
    -- Version:
    --      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
    -- Jun 17 2011 00:54:03 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
    --
    ----------------------------------------------------------------
    --> 测试数据:[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([单号] int,[日期] datetime,[名称] varchar(5),[数量] int,[金额] int)
    insert [huang]
    select 13020101,'2013-2-1','电脑',20,66000 union all
    select 13020101,'2013-2-1','赠品A',10,600 union all
    select 13020202,'2013-2-2','手机',20,66000 union all
    select 13020202,'2013-2-2','赠品B',5,300 union all
    select 13020303,'2013-2-3','手机',3,9900 union all
    select 13020404,'2013-2-4','电脑',2,6600
    --------------开始查询--------------------------SELECT  b.单号 ,
            b.日期 ,
            a.名称 ,
            b.数量 ,
            b.金额
    FROM    ( SELECT    *
              FROM      huang
              WHERE     名称 NOT LIKE '赠品%'
            ) a
            INNER JOIN ( SELECT 单号 ,
                                日期 ,
                                SUM(数量) 数量 ,
                                SUM([金额]) [金额]
                         FROM   [huang]
                         GROUP BY 单号 ,
                                日期
                       ) b ON a.单号 = b.单号
                              AND a.日期 = b.日期 
    /*
    单号          日期                      名称    数量          金额
    ----------- ----------------------- ----- ----------- -----------
    13020101    2013-02-01 00:00:00.000 电脑    30          66600
    13020202    2013-02-02 00:00:00.000 手机    25          66300
    13020303    2013-02-03 00:00:00.000 手机    3           9900
    13020404    2013-02-04 00:00:00.000 电脑    2           6600(4 行受影响)*/
      

  2.   


    with tb(单号,        日期,          名称,    数量,     金额)as (
    select '13020101',   '2013-2-1',     '电脑',    '20',      '66000' union all
    select '13020101',   '2013-2-1',     '赠品A',   '10',      '600' union all
    select '13020202',   '2013-2-2',     '手机',    '20',      '66000' union all
    select '13020202',   '2013-2-2',     '赠品B',   '5',       '300' union all
    select '13020303',   '2013-2-3',     '手机',     '3',      '9900' union all
    select '13020404',   '2013-2-4',     '电脑',     '2',      '6600')
    select * from (
    select 单号,日期,名称,sum(convert(int,数量)) over(partition by 单号,日期) 数量,
    sum(convert(int,金额)) over(partition by 单号,日期) 金额 from tb
    ) a where 名称  not like '%赠品%'
    2008下的,另外一个写法...