select rk.入库编号,rk.入库日其,rk.产品编号,rk.数量-ck.数量 as 数量
from rk,ck(*)
where rk.入库编号=ck.出库编号

解决方案 »

  1.   

    错了

    from rk(*),ck不知道行不行
    大家指教
      

  2.   

    select a.入库编号*, a.入库日期,a.产品编号,
           数量=(a.数量-b.数量)
    from rk a left join ck b on a.入库编号*=b.出库编号*,
      

  3.   


    select a.入库编号, a.入库日期,a.产品编号,
           数量=case when b.数量  is null then a.数量 else (a.数量-b.数量) end 
    from rk a left join ck b on a.入库编号=b.出库编号
      

  4.   

    create table rk (入库编号 char (3), 入库日期 char (10), 产品编号 char (3),数量 [decimal](12, 2))
    create table ck (出库编号 char (3), 入库日期 char (10), 产品编号 char (3),数量 [decimal](12, 2))insert into rk
    select '001','2004-01-01','001',100
    union
    select '002','2004-01-02','001',200
    insert into ck
    select '001','2004-01-02','001',20
    select isnull (a.入库编号,b.出库编号) as 入库编号,
    isnull (a.入库日期,null) as 入库时期,
    isnull (a.产品编号,b.产品编号) as 产品编号,
    isnull (a.数量,0)-isnull(b.数量,0) as 数量
    from rk a full join ck b 
    on a.入库编号=b.出库编号
      

  5.   

    老是写错!
    select a.入库编号, convert(varchar(10),a.入库日期,120)as 入库日期 ,a.产品编号,
           数量=case when b.数量  is null then a.数量 else (a.数量-b.数量) end 
    from rk a left join ck b on a.入库编号=b.出库编号--测试:
    create table rk(入库编号 varchar(5), 入库日期 datetime, 产品编号 varchar(5),数量 int)
    insert rk values('001','2004-01-01','001',100)
    insert rk values('002','2004-01-02','001',200)
    create table ck(出库编号 varchar(5), 出库日期 datetime, 产品编号 varchar(5),数量 int)
    insert ck values('001','2004-01-02','001',50)
    select a.入库编号, convert(varchar(10),a.入库日期,120)as 入库日期 ,a.产品编号,
           数量=case when b.数量  is null then a.数量 else (a.数量-b.数量) end 
    from rk a left join ck b on a.入库编号=b.出库编号drop table rk,ck--结果:
    入库编号  入库日期       产品编号  数量          
    ----- ---------- ----- ----------- 
    001   2004-01-01 001   50
    002   2004-01-02 001   200
      

  6.   

    我想的先进先出,是在ck表中体现的。上面的的确不对。不知道下面可以吗?
    create table rk(入库编号 varchar(5), 入库日期 datetime, 产品编号 varchar(5),数量 int)
    insert rk values('001','2004-01-01','001',100)
    insert rk values('002','2004-01-02','001',200)
    create table ck(出库编号 varchar(5), 出库日期 datetime, 产品编号 varchar(5),数量 int)
    insert ck values('001','2004-01-02','001',50)
    insert ck values('001','2004-01-03','001',10)select 出库编号,数量=sum(数量) 
    into #ck 
    from ck
    group by 出库编号
    select a.入库编号, convert(varchar(10),a.入库日期,120)as 入库日期 ,a.产品编号,
           数量=case when b.数量  is null then a.数量 else (a.数量-b.数量) end 
    from rk a left join #ck b on a.入库编号=b.出库编号
    drop table rk,ck,#ck--结果:
    入库编号  入库日期       产品编号  数量          
    ----- ---------- ----- ----------- 
    001   2004-01-01 001   40
    002   2004-01-02 001   200
      

  7.   

    --我想的先进先出,是在ck表中体现的。上面的的确不对。不知道下面可以吗?
    create table rk(入库编号 varchar(5), 入库日期 datetime, 产品编号 varchar(5),数量 int)
    insert rk values('001','2004-01-01','001',100)
    insert rk values('002','2004-01-02','001',200)
    create table ck(出库编号 varchar(5), 出库日期 datetime, 产品编号 varchar(5),数量 int)
    insert ck values('001','2004-01-02','001',50)
    insert ck values('001','2004-01-03','001',10)
    insert ck values('001','2004-01-03','001',100)  --加条记录就不对了.select 出库编号,数量=sum(数量) 
    into #ck 
    from ck
    group by 出库编号
    select a.入库编号, convert(varchar(10),a.入库日期,120)as 入库日期 ,a.产品编号,
           数量=case when b.数量  is null then a.数量 else (a.数量-b.数量) end 
    from rk a left join #ck b on a.入库编号=b.出库编号
    drop table rk,ck,#ck
      

  8.   

    所谓先进先出法,就是先入库的产品出库的时候先出呀,即同一种产品出库的时候,
    最先入库(按入库的日期)的那批先出库呀!!
    另外,上面的‘出库编号’和‘入库编号’只是个关键字而以,没有别的意义!!再举个例子吧:
    入库表rk(入库编号*, 入库日期, 产品编号,数量)
             r001     2004-01-01  001   90
             r002     2004-01-02  001    200
             r003     2004-01-03  001    100出库表ck(出库编号*, 出库日期, 产品编号,数量)
             C001     2004-01-02   001     50
             C002     2004-01-03   001    100根据出库表的记录,出库表有两条记录,
    第一条 编号C001 出库日期01-02  出库数量是50,
        那么出库的时候在入库表中找出最先入库的产品,
        即入库编号为r001的那批为最先入库的产品,
        所以编号为r001的这批产品数量减去出库的数量50
        最后,编号为r001的这批产品的库存量为40(即90-50=40)
    第二条 编号C002 出库日期01-03  出库数量是100,
        那么出库的时候在入库表中找出最先入库的产品,
        即入库编号为r001的那批为最先入库的产品(目前库存量为40),
        出库数量还差60,所以继续在入库表中找出最先入库的产品,
        即入库编号为r002的那批为最先入库的产品(库存量为200),
        所以200-60=140(r002的库存量为140) 
    查询库存的时候显示如下:
    入库编号*, 入库日期, 产品编号,数量(库存量)
     r001     2004-01-01  001   0
     r002     2004-01-02  001    140
     r003     2004-01-03  001    100大家帮帮忙,看用SQL语句能实现吗??    
        
      

  9.   

    --测试--测试数据
    create table rk(入库编号 char(4),入库日期 datetime,产品编号 char(3),数量 int)
    insert rk select 'r001','2004-01-01','001',90
    union all select 'r002','2004-01-02','001',200
    union all select 'r003','2004-01-03','001',100
    union all select 'r004','2004-01-03','001',100
    union all select 'r005','2004-01-03','002',100create table ck(出库编号 char(4),出库日期 datetime,产品编号 char(3),数量 int)
    insert ck select 'C001','2004-01-02','001',50
    union all select 'C002','2004-01-03','001',100
    union all select 'C002','2004-01-03','001',100
    union all select 'C002','2004-01-03','001',50
    go--查询
    select a.入库编号,a.入库日期,a.产品编号
    ,数量=case
    when b.数量 is null
    then a.数量
    when a.累计数量<=b.数量
    then 0
    when a.累计数量-a.数量>b.数量
    then a.数量
    else a.累计数量-b.数量
    end
    from(
    select 入库编号,入库日期,产品编号,数量=sum(数量)
    ,累计数量=(
    select sum(数量) from rk
    where 产品编号=a.产品编号 and(
    入库日期<a.入库日期
    or 入库日期=a.入库日期 and 入库编号<=a.入库编号))
    from rk a
    group by 入库编号,入库日期,产品编号
    )a left join(
    select 产品编号,数量=sum(数量)
    from ck
    group by 产品编号
    )b on a.产品编号=b.产品编号
    go--删除测试
    drop table ck,rk/*--测试结果入库编号   入库日期                   产品编号   数量    
    --------- -------------------------- --------- --------
    r001      2004-01-01 00:00:00.000    001       0
    r002      2004-01-02 00:00:00.000    001       0
    r003      2004-01-03 00:00:00.000    001       90
    r004      2004-01-03 00:00:00.000    001       100
    r005      2004-01-03 00:00:00.000    002       100(所影响的行数为 5 行)
    --*/
      

  10.   

    累计数量=(
    select sum(数量) from rk
    where 产品编号=a.产品编号 and(
    入库日期<a.入库日期
    or 入库日期=a.入库日期    --这里的到底是先执行or和下面的and的优先级不太明天老大讲解一下啊
                                                 and 入库编号<=a.入库编号))
      

  11.   

    初学者我建议先从j2se开始学!