create table 原始库存表(商品编号 int,商品名称 varchar(10),库存 decimal(10,2))
insert into 原始库存表
select 1001,'铅笔',89
union all select 1002,'钢笔',99
union all select 1002,'圆珠笔',123create table 销售记录(日期 datetime,商品编号 int,数量 decimal (10,2))
insert into 销售记录
select '2004-05-01 10:24:30','1001',5
union all select '2004-05-01 10:26:30','1002',3
union all select '2004-05-01 10:27:38','1003',15
union all select '2004-05-01 10:37:38','1001',1
union all select '2004-05-01 10:37:39','1002',54
union all select '2004-05-01 10:37:39','1003',15
union all select '2004-05-01 10:47:39','1001',1
union all select '2004-05-01 10:47:39','1002',1
union all select '2004-05-01 10:47:39','1003',1
union all select '2004-05-02 10:26:30','1001',3
union all select '2004-05-02 10:26:30','1002',3
union all select '2004-05-02 10:27:38','1003',15
union all select '2004-05-02 10:37:38','1001',1
union all select '2004-05-02 10:37:39','1002',54
union all select '2004-05-02 10:37:39','1003',15
union all select '2004-05-02 10:47:39','1001',1
union all select '2004-05-02 10:47:39','1002',1
union all select '2004-05-02 10:47:39','1003',1Select * ,
  ( Select Sum(数量) FROM 销售记录 WHERE Convert( char(10), 日期, 121) < = '2004-05-02' and 销售记录.商品编号 = 原始库存表.商品编号) as f_1,
 ( Select Sum(数量) FROM 销售记录 WHERE Convert( char(10), 日期, 121)  = '2004-05-02' and 销售记录.商品编号 = 原始库存表.商品编号) as f_2
from 原始库存表Drop table 原始库存表
Drop table 销售记录

解决方案 »

  1.   

    --查询
    declare @dt datetime
    set @dt='2004-05-2' --统计截止到2号
    --这里是做通用性处理,及提高处理效率用的
    declare @dt1 datetime
    select @dt1=convert(varchar(10),@dt,120)
    ,@dt=dateadd(day,1,@dt1)
    select @dt1,@dt
    select a.商品编号,a.库存,b.当日数量,c.累计数量
    from 原始库存表 a
    left join(
    select 商品编号,当日数量=sum(数量)
    from 销售记录
    where 日期>@dt1 and 日期<@dt
    group by 商品编号
    )b on a.商品编号=b.商品编号
    left join(
    select 商品编号,累计数量=sum(数量)
    from 销售记录
    where 日期<@dt
    group by 商品编号
    )c on a.商品编号=c.商品编号
      

  2.   

    --测试数据
    create table 原始库存表(商品编号 int,商品名称 varchar(10),库存 decimal(10,2))
    insert into 原始库存表
    select 1001,'铅笔',89
    union all select 1002,'钢笔',99
    union all select 1003,'圆珠笔',123create table 销售记录(日期 datetime,商品编号 int,数量 decimal (10,2))
    insert into 销售记录
    select '2004-05-01 10:24:30','1001',5
    union all select '2004-05-01 10:26:30','1002',3
    union all select '2004-05-01 10:27:38','1003',15
    union all select '2004-05-01 10:37:38','1001',1
    union all select '2004-05-01 10:37:39','1002',54
    union all select '2004-05-01 10:37:39','1003',15
    union all select '2004-05-01 10:47:39','1001',1
    union all select '2004-05-01 10:47:39','1002',1
    union all select '2004-05-01 10:47:39','1003',1
    union all select '2004-05-02 10:26:30','1001',3
    union all select '2004-05-02 10:26:30','1002',3
    union all select '2004-05-02 10:27:38','1003',15
    union all select '2004-05-02 10:37:38','1001',1
    union all select '2004-05-02 10:37:39','1002',54
    union all select '2004-05-02 10:37:39','1003',15
    union all select '2004-05-02 10:47:39','1001',1
    union all select '2004-05-02 10:47:39','1002',1
    union all select '2004-05-02 10:47:39','1003',1
    go--查询
    declare @dt datetime
    set @dt='2004-05-2' --统计截止到2号
    --这里是做通用性处理,及提高处理效率用的
    declare @dt1 datetime
    select @dt1=convert(varchar(10),@dt,120)
    ,@dt=dateadd(day,1,@dt1)select a.商品编号,a.库存,b.当日数量,c.累计数量
    from 原始库存表 a
    left join(
    select 商品编号,当日数量=sum(数量)
    from 销售记录
    where 日期>@dt1 and 日期<@dt
    group by 商品编号
    )b on a.商品编号=b.商品编号
    left join(
    select 商品编号,累计数量=sum(数量)
    from 销售记录
    where 日期<@dt
    group by 商品编号
    )c on a.商品编号=c.商品编号
    godrop table 原始库存表,销售记录/*--测试结果商品编号     库存         当日数量        累计数量    
    ----------- ------------ -------------- ------------
    1001        89.00        5.00           12.00
    1002        99.00        58.00          116.00
    1003        123.00       31.00          62.00(所影响的行数为 3 行)
    --*/