表1
入库单号,入库时间,商品条码,商品类别,件数,件重
表2
销售单号,销售时间,商品条码,件数现在想得到一时间上的盘点汇总表,包含字段如下
商品类别,件数,件重
注意:
1\两个表之间有商品条码是可以关联的,商品销售彰肯定有入库,
2\需要的是某个时间的盘点数,所以以上两个表的WHERE 时间<=查询时间才对.
3\所需要的表是汇总表,所以件数件重都应该是一个商品条码件数(入库-销售)相同类别再汇总的数.请大家帮忙多顶,谢谢.

解决方案 »

  1.   


    declare @表1 table(入库单号 varchar(20),入库时间 smalldatetime,商品条码 varchar(20),商品类别 varchar(10),件数 int,件重 decimal(6,3))
    insert @表1 
    select 'F0001','2008-04-02 12:12:12','000011122222','食品',455,25.30 union all
    select 'F0002','2008-04-02 12:32:12','111115555888','文具',235,40.80 union all
    select 'F0003','2008-04-02 12:21:12','121224444777','电器',100,55.30
    declare @表2 table(销售单号 varchar(20),销售时间 smalldatetime,商品条码 varchar(20),件数 int)
    insert @表2 
    select 'K0001','2008-04-05 15:12:12','000011122222',20 union all
    select 'K0002','2008-04-05 15:32:12','111115555888',45 union all
    select 'K0003','2008-04-05 15:21:12','121224444777',70
    select a.商品条码,a.商品类别,a.件数-b.件数 件数,a.件重
    From @表1 a ,@表2 b 
    where a.商品条码=b.商品条码 and b.销售时间<=getdate()/*--结果商品条码         商品类别   件数     件重
    --------------------------------------
    000011122222 食品 435 25.300
    111115555888 文具 190 40.800
    121224444777 电器 30 55.300*/
      

  2.   

    用存储过程,不会吧.而且出一的结果与要求不符,我需要的是按类别分类汇总的数,
    而且注意下,在表2里是没有件重的,而在最后的计算里件重也是要汇总的,也就是说表2需要从表1里找出相应条码的件重后再减.
    虽然改下最后的SQL语句也能出结果,但我还是想问问有没有不用存储过程就能出结果.
      

  3.   


    我这个不是存储过程!!!我的是在查询分析器中测试用的数据
    你只要下面这个语句就可以了
    这已经是按你的要求出来的结果了select a.商品条码,a.商品类别,a.件数-b.件数 件数,a.件重
    From @表1 a ,@表2 b 
    where a.商品条码=b.商品条码 and b.销售时间<=getdate() -- getdate()是当前系统时间,可随你修改 
      

  4.   

    其实一楼兄弟最后那条SQL语句你修改一下就是你要的结果了。。~
    之前建的两个临时表,你可以当成是你的实体表看就行了~
      

  5.   

    是的,如果建临时表的话就简单了,而且我只用一个临时表就成.但是....
    我真想要只用一句SQL就成的话.虽然我也没做出来,但我隐约的觉得应该行的.
    3楼的明显也不对的.没这么简单.
      

  6.   

    select distinct a.商品条码,a.商品类别,SUM(a.件数-b.件数) 件数,a.件重
    From @表1 a ,@表2 b 
    where a.商品条码=b.商品条码 and b.销售时间>=a.入库时间 and b.销售时间<=查询时间 
    group by a.商品条码,a.商品类别,a.件重
      

  7.   


    没语言了,这种语句也看不懂!!
    你的2个裤衩是怎么来的?临时表只是测试用的
    你把@表1和@表2改成 表1,表2,就是对应你的实表了,作弊的都懂的套上去变通了!!select a.商品条码,a.商品类别,a.件数-b.件数 件数,a.件重
    From 表1 a ,表2 b 
    where a.商品条码=b.商品条码 and b.销售时间<=getdate() -- getdate()是当前系统时间,可随你修改,不会这个函数也不知道吧
      

  8.   

    select 商品条码,(in_num-out_num),件重
    (select ditinct(商品条码) as 商品条码 from 表1 a
    left join
    (select 商品条码,sum(商品件数) as IN_num ,件重 from 表1 group by 商品条码,件重 where getdate()<='时间表达式') b
    on a.商品条码=b.商品条码
    left join
    (select 商品条码,sum(商品件数) as out_num from 表2 group by 商品条码 where getdate()<='时间表达式') c
    on a.code=b.code) HZB //{汇总表}
    至于有入库还没出库的统计在HZB里是NULL值,可以在显示时加以控制,或者写到临时表中对其变更,让它等于入库数
      

  9.   

    --根据条码查询所有商品数量汇总(包括已经入库,而没有出售过的商品汇总)
    --AUTHOR:KAIKAI
    --DATE:2008-04-07
    --此结果测试用,用实表时,将 @表1, @表2 去掉"@"即可declare @表1 table(入库单号 varchar(20),入库时间 smalldatetime,商品条码 varchar(20),商品类别 varchar(10),件数 int,件重 decimal(6,3))
    insert @表1 
    select 'F0001', '2008-04-02 12:12:12',  '000011122222', '食品', 455, 25.30 union all
    select 'F0002', '2008-04-02 12:32:12',  '111115555888', '文具', 235, 40.80 union all
    select 'F0003', '2008-04-02 12:21:12',  '121224444777', '电器', 100, 55.30 union all
    select 'F0004', '2008-04-02 12:25:12',  '121224444777', '电器', 430, 55.30 union all
    select 'F0005', '2008-04-02 12:25:12',  '121224444999', '设备', 630, 89.30 union all
    select 'F0006', '2008-04-02 12:45:12',  '121224444888', '五金', 430, 56.30--在@表1,添加记录时,同一商品的商品条码,商品类别,件重应该一致,件重小数保留三位有效declare @表2 table(销售单号 varchar(20),销售时间 smalldatetime,商品条码 varchar(20),件数 int)
    insert @表2 
    select 'K0001', '2008-04-05 15:12:12', '000011122222', 20 union all
    select 'K0002', '2008-04-05 15:32:12', '111115555888', 45 union all
    select 'K0003', '2008-04-05 15:21:12', '121224444777', 70 union all
    select 'K0004', '2008-04-05 15:55:12', '000011122222', 67--@表2根据条码出售商品----根据条码查询所有商品数量汇总(包括已经入库,而没有出售过的商品汇总)
    --AUTHOR:KAIKAI
    --DATE:2008-04-07
    --此结果测试用,用实表时,将 @表1, @表2 去掉"@"即可declare @表1 table(入库单号 varchar(20),入库时间 smalldatetime,商品条码 varchar(20),商品类别 varchar(10),件数 int,件重 decimal(6,3))
    insert @表1 
    select 'F0001', '2008-04-02 12:12:12',  '000011122222', '食品', 455, 25.30 union all
    select 'F0002', '2008-04-02 12:32:12',  '111115555888', '文具', 235, 40.80 union all
    select 'F0003', '2008-04-02 12:21:12',  '121224444777', '电器', 100, 55.30 union all
    select 'F0004', '2008-04-02 12:25:12',  '121224444777', '电器', 430, 55.30 union all
    select 'F0005', '2008-04-02 12:25:12',  '121224444999', '设备', 630, 89.30 union all
    select 'F0006', '2008-04-02 12:45:12',  '121224444888', '五金', 430, 56.30--在@表1,添加记录时,同一商品的商品条码,商品类别,件重应该一致,件重小数保留三位有效declare @表2 table(销售单号 varchar(20),销售时间 smalldatetime,商品条码 varchar(20),件数 int)
    insert @表2 
    select 'K0001', '2008-04-05 15:12:12', '000011122222', 20 union all
    select 'K0002', '2008-04-05 15:32:12', '111115555888', 45 union all
    select 'K0003', '2008-04-05 15:21:12', '121224444777', 70 union all
    select 'K0004', '2008-04-05 15:55:12', '000011122222', 67--@表2根据条码出售商品--查询统计select M.商品条码,M.商品类别, isnull(M.件数,0)-isnull(N.件数,0) 件数,M.件重 from
    (select 商品条码,商品类别, Sum(件数) 件数,件重 from @表1  group by 商品条码 , 商品类别,件重  ) M 
    Left join
    (select 商品条码, Sum(件数) 件数 from @表2 where 销售时间<=getdate()  group by 商品条码) N   --getdate()可改为查询的汇总时间
    on M.商品条码=N.商品条码
    /* 测试结果商品条码         商品类别   件数     件重
    --------------------------------------
    000011122222 食品 368 25.300   368 = 455-20-67
    111115555888 文具 190 40.800   190 = 235-45
    121224444777 电器 460 55.300   460 = 100+430-70
    121224444888 五金 430 56.300   430 = 430-0   (此商品未出售过)
    121224444999 设备 630 89.300   630 = 630-0   (此商品未出售过)(所影响的行数为 5 行)*/下面查询汇总统计select M.商品条码,M.商品类别, isnull(M.件数,0)-isnull(N.件数,0) 件数,M.件重 from
    (select 商品条码,商品类别, Sum(件数) 件数,件重 from @表1  group by 商品条码 , 商品类别,件重  ) M 
    Left join
    (select 商品条码, Sum(件数) 件数 from @表2 where 销售时间<=getdate()  group by 商品条码) N   --getdate()可改为查询的汇总时间
    on M.商品条码=N.商品条码
    /* 测试结果商品条码         商品类别   件数     件重
    --------------------------------------
    000011122222 食品 368 25.300
    111115555888 文具 190 40.800
    121224444777 电器 460 55.300
    121224444888 五金 430 56.300
    121224444999 设备 630 89.300(所影响的行数为 5 行)*/