原贴子
http://topic.csdn.net/u/20110328/14/36fb8b3a-e48d-4bb2-8254-abeb54dc7a34.html有下面六点问题
1.只要工厂等于BJ2006,2007的数据,库地把等于844的删除
2.用今天的日期减去入库时间得出(在库天数)
3.根据在库天数得出""库存天数"",小于30天以下的不要,只要30天以上的
4.SKU包含"65"开头的为"产品属性"为主机,SKU包含64开头的为"产品属性"为显示器,SKU不包含64与65的"产品属性"为其它
5.平台全部为HY
6."工厂"等于BJ2006的事业部全部为PCC,"名称"包含CC的事业部为DCC,不符合这两个条件的事业部全部为OBB1.只要工厂等于BJ2006,2007的数据,库地把等于844的删除库地等于844没有删除
上次问题得出的结果如下现在的问题是把相同工厂,库地,sku,批次,入库时间合并成一条记录,数量进行汇总  向三姐请教

解决方案 »

  1.   

    正确数据:
    HY PCC BJ2006 399 651846 p102329 eeeee 主机 00:00.0 80 50 30~60
    HY DCC BJ2007 411 646813 p102323 cccc 显示器 00:00.0 50 78 90以上
      

  2.   


    create table tb
    (
        工厂 varchar(10),
        库地 int,
        类型 varchar(10),
        属性 varchar(10),
        SKU varchar(10),
        批次 varchar(10),
        名称 varchar(10),
        入库时间 datetime,
        数量 int,
        重量 int,
        备注 varchar(10)
    )
    insert into tb
    select 'BJ2006',399,'DK','RTE','651846','p102329','eeeee','2011-2-7',50,700,'' union all
    select 'BJ2006',399,'DK','RTE','651846','p102329','eeeee','2011-2-7',30,600,'' union all
    select 'BJ2007',411,'DK','RTE','646813','p102323','cccc','2011-1-10',50,500,'' union all
    select 'BJ2114',422,'EO','CRE','218441','p102331','eeeee','2010-4-8',15,999,'' union all
    select 'BJ2119',401,'RO','DFE','218981','p102329','eeeeeeee','2011-3-8',100,213,'' union all 
    select 'BJ2119',844,'RO','DFE','218981','p102329','eeeeeeee','2011-3-8',100,213,''
    go--1 工厂为BJ2006,2007的数据,库地把等于844的删除delete from tb
    where 工厂 in ('BJ2006','BJ2007') and 库地 = 844select [平台],工厂,库地,SKU,批次,名称,入库时间,sum(数量)数量,[入库天数],[库存天数]
    from(
    select N'HY' as [平台],
    (case when 工厂 = 'BJ2006' then 'PCC' when 工厂 <> 'BJ2006' and charindex('cc',名称) > 0 then 'DCC' else 'OBB' end) as[事业部],
    工厂,库地,SKU,批次,名称,
    (case when left(SKU,2) = '65' then N'主机' when left(SKU,2) = '64' then N'显示器' else N'其它' end) as [产品属性],
    入库时间,数量,
    datediff(dd,入库时间,getdate()) as [入库天数],
    (case when datediff(dd,入库时间,getdate()) between 30 and 60 then '30~60'
      when datediff(dd,入库时间,getdate()) between 30 and 60 then '60~90'
      else '90以上' end) as [库存天数]
    from tb
    where 工厂 in ('BJ2006','BJ2007') and datediff(dd,入库时间,getdate()) >= 30
    )t
    group by [平台],工厂,库地,SKU,批次,名称,入库时间,[入库天数],[库存天数]drop table tb/*平台   工厂         库地          SKU        批次         名称         入库时间                    数量          入库天数        库存天数
    ---- ---------- ----------- ---------- ---------- ---------- ----------------------- ----------- ----------- ------
    HY   BJ2006     399         651846     p102329    eeeee      2011-02-07 00:00:00.000 80          50          30~60
    HY   BJ2007     411         646813     p102323    cccc       2011-01-10 00:00:00.000 50          78          90以上(2 行受影响)
      

  3.   


    create table tb
    (
        工厂 varchar(10),
        库地 int,
        类型 varchar(10),
        属性 varchar(10),
        SKU varchar(10),
        批次 varchar(10),
        名称 varchar(10),
        入库时间 datetime,
        数量 int,
        重量 int,
        备注 varchar(10)
    )
    insert into tb
    select 'BJ2006',399,'DK','RTE','651846','p102329','eeeee','2011-2-7',50,700,'' union all
    select 'BJ2006',399,'DK','RTE','651846','p102329','eeeee','2011-2-7',30,600,'' union all
    select 'BJ2007',411,'DK','RTE','646813','p102323','cccc','2011-1-10',50,500,'' union all
    select 'BJ2114',422,'EO','CRE','218441','p102331','eeeee','2010-4-8',15,999,'' union all
    select 'BJ2119',401,'RO','DFE','218981','p102329','eeeeeeee','2011-3-8',100,213,'' union all 
    select 'BJ2119',844,'RO','DFE','218981','p102329','eeeeeeee','2011-3-8',100,213,''
    go
    --把工厂等于BJ2004 的改为BJ2007,然后在计算
    --原表数据为BJ2004的不做修改可以如下,可以修改表可以update后按楼上的继续!
    /*
    update tb
    set 工厂 = 'BJ2007'
    where 工厂 = 'BJ2004'
    */
    --1 工厂为BJ2006,2007的数据,库地把等于844的删除delete from tb
    where 工厂 in ('BJ2006','BJ2007','BJ2004') and 库地 = 844select [平台],工厂,库地,SKU,批次,名称,入库时间,sum(数量)数量,[入库天数],[库存天数]
    from(
    select N'HY' as [平台],
    (case when 工厂 = 'BJ2006' then 'PCC' when 工厂 <> 'BJ2006' and charindex('cc',名称) > 0 then 'DCC' else 'OBB' end) as[事业部],
    工厂,库地,SKU,批次,名称,
    (case when left(SKU,2) = '65' then N'主机' when left(SKU,2) = '64' then N'显示器' else N'其它' end) as [产品属性],
    入库时间,数量,
    datediff(dd,入库时间,getdate()) as [入库天数],
    (case when datediff(dd,入库时间,getdate()) between 30 and 60 then '30~60'
      when datediff(dd,入库时间,getdate()) between 30 and 60 then '60~90'
      else '90以上' end) as [库存天数]
    from tb
    where 工厂 in ('BJ2006','BJ2007','BJ2004') and datediff(dd,入库时间,getdate()) >= 30
    )t
    group by [平台],工厂,库地,SKU,批次,名称,入库时间,[入库天数],[库存天数]drop table tb/*
    平台   工厂         库地          SKU        批次         名称         入库时间                    数量          入库天数        库存天数
    ---- ---------- ----------- ---------- ---------- ---------- ----------------------- ----------- ----------- ------
    HY   BJ2006     399         651846     p102329    eeeee      2011-02-07 00:00:00.000 80          50          30~60
    HY   BJ2007     411         646813     p102323    cccc       2011-01-10 00:00:00.000 50          78          90以上(2 行受影响)
      

  4.   

    三姐
    你这个数据,还有一个问题吧,上一个贴子17楼,附加了一个问题
    上个贴子  17楼的问题
    不好意思结果给错了我忘了一个条件,还请帮忙写一下
    把工厂等于BJ2004 的改为BJ2007,然后在计算
    这个问题解决了,马上结贴
    .
      

  5.   


    -- 按天算,改下入库时间就可以了。
    select [平台],工厂,库地,SKU,批次,名称,入库时间,sum(数量)数量,convert(varchar(10),[入库天数],120) [入库天数],[库存天数]
    from(
    select N'HY' as [平台],
    (case when 工厂 = 'BJ2006' then 'PCC' when 工厂 <> 'BJ2006' and charindex('cc',名称) > 0 then 'DCC' else 'OBB' end) as[事业部],
    工厂,库地,SKU,批次,名称,
    (case when left(SKU,2) = '65' then N'主机' when left(SKU,2) = '64' then N'显示器' else N'其它' end) as [产品属性],
    入库时间,数量,
    datediff(dd,入库时间,getdate()) as [入库天数],
    (case when datediff(dd,入库时间,getdate()) between 30 and 60 then '30~60'
      when datediff(dd,入库时间,getdate()) between 30 and 60 then '60~90'
      else '90以上' end) as [库存天数]
    from tb
    where 工厂 in ('BJ2006','BJ2007','BJ2004') and datediff(dd,入库时间,getdate()) >= 30
    )t
    group by [平台],工厂,库地,SKU,批次,名称,入库时间,convert(varchar(10),[入库天数],120),[库存天数]