TA:
------------------------------
Goods    LotNo    DT    Qty
M0001    L0001    1     500
M0001    L0001    2     600
M0001    L0001    4     300
M0002    L0003    1     800TB:
------------------------------
Goods    LotNo    Qty
M0001    L0001    700
M0002    L0003    600根据上面两个表,对TA-TB后要求得出下面的查询结果:
------------------------------
Goods    LotNo    DT    Qty
M0001    L0001    2     400
M0001    L0001    4     300
M0002    L0003    1     200请问这个 SQL 怎么写?谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/u/20081012/11/63FEEC8B-4CA5-44D9-9889-5C449CE76184.htmlhttp://topic.csdn.net/u/20081107/10/30388479-8739-4A12-AA1A-9611502FF8F9.html
    --> liangCK小梁 于2008-11-07
    --> 生成测试数据: @T
    DECLARE @T TABLE (日期 DATETIME,金额 INT)
    INSERT INTO @T
    SELECT '2008-10-1',100 UNION ALL
    SELECT '2008-10-5',300 UNION ALL
    SELECT '2008-10-27',1200 UNION ALL
    SELECT '2008-11-1',-800--SQL查询如下:DECLARE @iSum INT;SET @iSum=(SELECT SUM(金额) FROM @T)SELECT 日期,金额,
           CASE WHEN px1<@iSum
                  THEN 金额
                ELSE
                  CASE WHEN @iSum-px2<0 
                         THEN 0
                       ELSE @iSum-px2
                  END
           END 金额2
    FROM 
    (
       SELECT 日期,金额,
              px1=(SELECT SUM(金额)
                   FROM @T
                   WHERE 日期<=t.日期),
              px2=(SELECT SUM(金额)
                   FROM @T
                   WHERE 日期<t.日期)
       FROM @T AS t
    ) AS T/*
    日期                      金额          金额2
    ----------------------- ----------- -----------
    2008-10-01 00:00:00.000 100         100
    2008-10-05 00:00:00.000 300         300
    2008-10-27 00:00:00.000 1200        400
    2008-11-01 00:00:00.000 -800        0(4 行受影响)
    */
      

  2.   

    第一行那应该是2吧
    M0001    L0001    1    500 应该是
    M0001    L0001    2    500 
      

  3.   

    這個問題也就是先進先出,TA表是入倉、TB表是出倉表,而結果是要顯示給用戶的
      

  4.   

    是TA-TB:
    M0001    L0001    1    500   -TB(500)  ==> 0
    M0001    L0001    2    600   -TB(200)  ==> 400
    M0001    L0001    4    300             ==> 300
    M0002    L0003    1    800   -TB(600)  ==> 200根据上面两个表,对TA-TB后要求得出下面的查询结果:
    ------------------------------
    M0001    L0001    2    400 
    M0001    L0001    4    300
    M0002    L0003    1    200