A 列表发货编号    加工数量   货品编号
001          1          10001
001          2          10002
001          3          10003
002          1          10002
003          2          10003
生成生产需求货品编号 加工数量
10001    1
10002    3
10003    5
生成条码货品条码编号    货品编号   
100001       10001
100002       10002
100003       10002
100004       10002
100005       10003
100006       10003
100007       10003
100008       10003
100009       10003
然后每个条码入库能对上发货编号,应该如何处理?

解决方案 »

  1.   

    if object_id('[A]') is not null drop table [A]
    go
    create table [A]([发货编号] varchar(3),[加工数量] int,[货品编号] int)
    insert [A]
    select '001',1,10001 union all
    select '001',2,10002 union all
    select '001',3,10003 union all
    select '002',1,10002 union all
    select '003',2,10003
    go--生成生产需求
    select 货品编号,加工数量=sum(加工数量) from a group by 货品编号
    /**
    货品编号        加工数量
    ----------- -----------
    10001       1
    10002       3
    10003       5(3 行受影响)
    **/--生成条码货品
    select 
      条码编号=100000+row_number() over(order by getdate()), 
      货品编号
    from 
      (select 货品编号,加工数量=sum(加工数量) from a group by 货品编号) a
    join
      master..spt_values b
    on
      b.type='P' and a.加工数量>b.number/**
    条码编号                 货品编号
    -------------------- -----------
    100001               10001
    100002               10002
    100003               10002
    100004               10002
    100005               10003
    100006               10003
    100007               10003
    100008               10003
    100009               10003(9 行受影响)
    **/
      

  2.   

    不知道你是不是想要这个CREATE TABLE A(发货编号 VARCHAR(10), 加工数量 INT,货品编号 VARCHAR(10))
     INSERT INTO A
     SELECT '001', 1, '10001'
     UNION ALL 
     SELECT '001', 2, '10002'
     UNION ALL 
     SELECT '001', 3, '10003'
     UNION ALL 
     SELECT '002', 1, '10002'
     UNION ALL 
     SELECT '003', 2, '10003'
     
     
     CREATE TABLE 生成生产需求(货品编号 VARCHAR(10), 加工数量 INT )
     INSERT INTO 生成生产需求
     SELECT '10001',  1
     UNION ALL 
     SELECT '10002',  3
     UNION ALL 
     SELECT '10003',  5
     
     
     CREATE TABLE 生成条码货品(条码编号 VARCHAR(10), 货品编号   VARCHAR(10))
     INSERT INTO 生成条码货品
     SELECT '100001', '10001'
     UNION ALL 
     SELECT '100002', '10002'
     UNION ALL 
     SELECT '100003', '10002'
     UNION ALL 
     SELECT '100004', '10002'
     UNION ALL 
     SELECT '100005', '10003'
     UNION ALL 
     SELECT '100006', '10003'
     UNION ALL 
     SELECT '100007', '10003'
     UNION ALL 
     SELECT '100008', '10003'
     UNION ALL 
     SELECT '100009', '10003'
     
     
     SELECT b.条码编号,a.发货编号 FROM 生成条码货品 B INNER JOIN A a ON a.货品编号=b.货品编号
     /*
     条码编号       发货编号
     ---------- ----------
     100001     001
     100002     001
     100003     001
     100004     001
     100005     001
     100006     001
     100007     001
     100008     001
     100009     001
     100002     002
     100003     002
     100004     002
     100005     003
     100006     003
     100007     003
     100008     003
     100009     003
     
     (17 行受影响)
     
     */
      

  3.   

    符合inner join的就能对应的上,如果对应不上,那就证明你的数据本来就不能匹配的,这时候你要考虑如何处理?是标识为无法匹配?还是抛出异常?