入库时间 入库数量 订单数量
20150105  3000       10000
20150106  4000       10000
20150108  4050       10000
20150109  950       10000本人sql新手,有如上表个,希望将入库数量累加,当累加的数量>=订单数量,取入库时间的值出来
如上,取20150108出来
说明,订单数量是同一个订单的,只不过每行都出现而已。就是说同一个订单的多次入库,因为投产的数量大于订单的数量,会出现入库数量大于订单的数量的情况,我现在需要将入库的累计数量刚刚大于等于订单的数量的入库日期

解决方案 »

  1.   

    SELECT TOP 1 T1.入库时间
    FROM TB T1
    JOIN TB T2 ON T1.入库时间>=T2.入库时间
    GROUP BY T1.入库时间,T1.订单数量
    HAVING SUM(T2.入库数量)>T1.订单数量
    ORDER BY T1.入库时间只查一个订单的话,直接这样
      

  2.   

    那就要分组,你举例的时候,不能把这个重要信息忽略掉,不然别人写的,你不一定知道要改哪SELECT 订单号,MIN(入库时间)入库时间 FROM(
    SELECT T1.订单号,T1.入库时间
    FROM TB T1
    JOIN TB T2 ON T1.订单号=T2.订单号 AND T1.入库时间>=T2.入库时间
    GROUP BY T1.订单号,T1.入库时间,T1.订单数量
    HAVING SUM(T2.入库数量)>=T1.订单数量
    )T
    GROUP BY 订单号
      

  3.   

    字段说明TD001订单单别,TD002订单单号,TD003订单序号,TD008订单数量,TD013预计交货日期,TA001工单单别,TA002工单单号,TF003入库日期,TF001入库单别,TG011入库数量
    说明:1、订单单别单号序号组成唯一值,工单单别单号也组成唯一值,两者是一一对应的
    2、我需要得到一个新的表TD002订单单号,TD003订单序号,TD008订单数量,TD013预计交货日期,TA001工单单别,TA002工单单号,data,lj,zs
    字段说明:data  考核的标准是,一个订单对应一个工单生产,一个生产的单子是分多批次入库的,当入库数量累加刚刚大于等于订单数量的时候,取出来的入库日期(TF003)
    lj:在此情况下累计的入库数量
    zs:这个工单的总的入库数量
      

  4.   

    ;WITH CTE AS(
    SELECT *,SUM(TG011入库数量)OVER(PARTITION BY TA002工单单号)zs
    FROM TB
    )
    SELECT TD002订单单号,TD003订单序号,TD008订单数量,TD013预计交货日期,TA001工单单别,TA002工单单号
    ,MIN(data)data,MIN(lj)lj,zs
    FROM(
    SELECT T1.TD002订单单号,T1.TD003订单序号,T1.TD008订单数量,T1.TD013预计交货日期,T1.TA001工单单别,T1.TA002工单单号,T1.zs
    ,T1.TF003入库日期 data,SUM(T2.TG011入库数量)lj
    FROM CTE T1
    JOIN CTE T2 ON T1.TD002订单单号=T2.TD002订单单号
    AND T1.TF003入库日期>=T2.TF003入库日期
    GROUP BY T1.TD002订单单号,T1.TD003订单序号,T1.TD008订单数量,T1.TD013预计交货日期,T1.TA001工单单别,T1.TA002工单单号,T1.zs
    ,T1.TF003入库日期
    HAVING SUM(T2.TG011入库数量)>=T1.TD008订单数量
    )T
    GROUP BY TD002订单单号,TD003订单序号,TD008订单数量,TD013预计交货日期,TA001工单单别,TA002工单单号,zsSQL2005+有效