表1:table1原料编号         厂家号           数量GN2005 06       SS               200GN2005 06       BG               300FG2006 03        SS              100FD2006 01       BG               300FD2006 01       SS                260
表2:table2机台号            原料编号            数量4331              GN2005 06        4004332              FD2006 01       150 4333             FG2006 03        200 4335             GN2005 06        150表3:table3机台号            原料编号           出库量   不足数4331              GN2005 06           400      04332              FD2006 01           150      04333              FG2006 03           100      0 
4335             GN2005 06           100      -50表1是库存中的信息每种相同的原料可能是不同厂家生产的,表2是生产需要用到的原料数,不管是哪个厂家生产的只要是同种原料就可以使用,怎么通过表1和表2运算得到表3中的结果???(有多个机器可以使用同一种原料的情况)
先谢谢各位了

解决方案 »

  1.   

    CREATE TABLE TABLE1(原料编号 NVARCHAR(20),厂家号 NCHAR(2),数量 INT)
    INSERT TABLE1
    SELECT 'GN2005 06','SS',200 UNION ALL
    SELECT 'GN2005 06','BG',300 UNION ALL
    SELECT 'FG2006 03','SS',100 UNION ALL
    SELECT 'FD2006 01','BG',300 UNION ALL
    SELECT 'FD2006 01','SS',260
    --SELECT * FROM TABLE1CREATE TABLE TABLE2(机台号 NCHAR(4),原料编号 NVARCHAR(20),数量 INT)
    INSERT TABLE2
    SELECT '4331','GN2005 06',400 UNION ALL
    SELECT '4332','FD2006 01',150 UNION ALL
    SELECT '4333','FG2006 03',200 UNION ALL 
    SELECT '4335','GN2005 06',150
    --SELECT * FROM TABLE2-- 假设机台号是唯一值
    SELECT     机台号,
        原料编号,
        出库量=数量,
        --(SELECT SUM(数量) FROM TABLE1 A WHERE 原料编号=B.原料编号),
        不足数=
        CASE WHEN
            (SELECT SUM(数量) FROM TABLE1 A WHERE 原料编号=B.原料编号)
            -
            (SELECT SUM(数量) from TABLE2   WHERE 原料编号=B.原料编号 AND 机台号<=B.机台号)>0 THEN 0 ELSE
            -------------------------------------------------------------------------------------------
            (SELECT SUM(数量) FROM TABLE1 A WHERE 原料编号=B.原料编号)
            -
            (SELECT SUM(数量) from TABLE2   WHERE 原料编号=B.原料编号 AND 机台号<=B.机台号)
        ENDFROM TABLE2 BDROP TABLE TABLE1,TABLE2
      

  2.   

    机台号  原料编号          出库量      不足数         
    ---- -------------------- ----------- ----------- 
    4331 GN2005 06            400         0
    4332 FD2006 01            150         0
    4333 FG2006 03            200         -100
    4335 GN2005 06            150         -50