有如下数据表单号 日期 名称 数量 金额
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
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
-- 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 行受影响)*/
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下的,另外一个写法...