按過去四週銷售件排或倒排序
STOCK_NO8 款号
FIRSTWEEK 進貨週數(由進貨首日計算除7天)
TTL_SI 累計進货件
BALANCE 現庫存件
W201013 2010第13週銷售件
W201012 2010第12週銷售件
W201011 2010第11週銷售件
W201010 2010第10週銷售件
WEEK_TOTAL 過去四週銷售件
件成本
成本 只計新季貨
新貨成本% 只計新季貨以上需求中,进货周期,怎么求出当前时间是进货后的第几周
还有就是周期销售件中,是求当前星期的上四个星期的销售件,怎么写哦,研究了两个小时,搞不懂!
大家帮帮忙,我先谢谢了!

解决方案 »

  1.   

    假如今天是星期3,或者星期四,怎么去求上个星期的销售数量!或者最近四周的销售数量!也就是要周期的计算方式,利用Sql语句怎么计算!(周期也就是说一个星期)
      

  2.   

    第一个得看你怎么设计表了,或者在库管理是否先进先出来考虑
    第二个问题解决方案
    SELECT SUM(DECODE(CEIL((SYSDATE - T.销售日期) / 7) , 0, T.销售数, 0)) AS 过去第1周销售,
           SUM(DECODE(CEIL((SYSDATE - T.销售日期) / 7) , 1, T.销售数, 0)) AS 过去第2周销售,
           SUM(DECODE(CEIL((SYSDATE - T.销售日期) / 7) , 2, T.销售数, 0)) AS 过去第3周销售,
           SUM(DECODE(CEIL((SYSDATE - T.销售日期) / 7) , 3, T.销售数, 0)) AS 过去第3周销售
      FROM 销售明细表 T是以当前日期反推的一周,假设当前是星期3,则过去第一周统计数为上周3至本周2
      

  3.   

    利用trunc(DATECOL,'iw')
    举个例子,求上个星期的。with as里面的是测试数据
    WITH tt AS(
      SELECT DATE'2010-4-11' rq,11 amount FROM dual
      UNION ALL SELECT DATE'2010-4-17',20 FROM dual)SELECT *
    FROM tt
    WHERE rq>=trunc(SYSDATE,'iw')-7
      and rq<trunc(sysdate,'iw')
      

  4.   

    select s.*,to_Char(((sysdate-l.LASTIN)/7),'9999') AS "进货日期",ll.stockvalue as "累计数量" 
    from (select DD.SHOP_CODE,DD.COM_ID,DD.ITEM_CODE,
           sum(decode(ceil((add_months(sysdate,-12)-dh.inv_date)/7),0,dh.sell_qty,0)) as "第一周",
           sum(decode(ceil((sysdate-dh.inv_date)/7),1,dh.sell_qty,0)) as "第二周",
           sum(decode(ceil((sysdate-dh.inv_date)/7),2,dh.sell_qty,0)) as "第三周",
           sum(decode(ceil((sysdate-dh.inv_date)/7),3,dh.sell_qty,0)) as "第四周",
           (sum(decode(ceil((add_months(sysdate,-12)-dh.inv_date)/7),0,dh.sell_qty,0))+sum(decode(ceil((sysdate-dh.inv_date)/7),0,dh.sell_qty,0))
            +sum(decode(ceil((sysdate-dh.inv_date)/7),0,dh.sell_qty,0))+sum(decode(ceil((sysdate-dh.inv_date)/7),0,dh.sell_qty,0))) as "四周总数"
     from dinv_hdr dh inner join dinv_dtl dd on dh.com_id=dd.com_id and dh.inv_num=dd.inv_num GROUP BY DD.COM_ID,DD.SHOP_CODE,DD.ITEM_CODE) s
    left join lot l on l.com_id=s.com_id and l.ware_code=s.shop_code and l.item_code=s.item_code
    left join lot_log ll on l.com_id=ll.com_id and l.ware_code=ll.ware_code and l.item_code=ll.com_code我想取最小的l.LASTIN日期字段,因为同款货品可能多次进货,取最小的时间再除以7!怎么取~!
      

  5.   

    LZ,你一定在一个SQL里面实现所有的功能吗?
      

  6.   

    select s.*,to_Char(((sysdate-l.LASTIN)/7),'9999'),ll.stockvalue 
    from (select DD.SHOP_CODE,DD.COM_ID,DD.ITEM_CODE,
           NVL(sum(dh.sell_qty),0) as "前一周",
           NVL(sum(dh.sell_qty),0) as "前二周",
           NVL(sum(dh.sell_qty),0) as "前三周",
           NVL(sum(dh.sell_qty),0) as "前四周",
           (sum(dh.sell_qty)+sum(dh.sell_qty)
            +sum(dh.sell_qty)+sum(dh.sell_qty)) as "四周总数"
     from dinv_hdr dh inner join dinv_dtl dd on dh.com_id=dd.com_id and dh.inv_num=dd.inv_num 
     where case
     when to_char(sysdate,'day') ='星期一' then (dh.inv_date >= sysdate -7 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期二' then (dh.inv_date >= sysdate -8 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期三' then (dh.inv_date >= sysdate -9 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期四' then (dh.inv_date >= sysdate -10 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期五' then (dh.inv_date >= sysdate -11 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期六' then (dh.inv_date >= sysdate -12 and dh.inv_date<=sysdate -6)
     when to_char(sysdate,'day') ='星期日' then (dh.inv_date >= sysdate -13 and dh.inv_date<=sysdate -6)
     end case
     GROUP BY DD.COM_ID,DD.SHOP_CODE,DD.ITEM_CODE) s
    left join lot l on l.com_id=s.com_id and l.ware_code=s.shop_code and l.item_code=s.item_code
    left join lot_log ll on l.com_id=ll.com_id and l.ware_code=ll.ware_code and l.item_code=ll.com_code这样有可能实现吗?