表格如下
商品编号    存放位置        存入时间
1          1柜              2000-01-01
1          2柜              2000-02-01
1          1柜              2000-02-102          2柜              2000-01-10
2          1柜              2000-01-203          3柜              2000-01-02
3          4柜              2000-01-05
3          3柜              2000-01-10
3          4柜              2000-01-20求一SQL,统计每种商品在每个柜中存放的天数,必须用一条SQL命令完成,要求结果如下:
统计截止日期,2000-02-10
商品编号    存放位置        存放天数
1          1柜            31
1          2柜            102          1柜            21
2          2柜            103          3柜            13
3          4柜            21

解决方案 »

  1.   

    -- data
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(商品编号 int, 存放位置 varchar(8), 存入时间 datetime)
    insert into #
    select 1, '1柜', '2000-01-01' union all
    select 1, '2柜', '2000-02-01' union all
    select 1, '1柜', '2000-02-10' union all
    select 2, '2柜', '2000-01-10' union all
    select 2, '1柜', '2000-01-20' union all
    select 3, '3柜', '2000-01-02' union all
    select 3, '4柜', '2000-01-05' union all
    select 3, '3柜', '2000-01-10' union all
    select 3, '4柜', '2000-01-20'-- parameter
    declare @d datetime
    set @d = '2000-02-10';-- query
    with cte as
    (
    select *, rn=row_number()over(partition by 商品编号 order by 存入时间) from # where 存入时间<=@d
    )
    select a.商品编号,a.存放位置, days=sum(datediff(day,a.存入时间,isnull(b.存入时间,@d))) from cte a left join cte b on a.商品编号=b.商品编号 and a.rn=b.rn-1 group by a.商品编号,a.存放位置 order by 1,2/*
    商品编号    存放位置    days
    ----------- ----------- -----------
    1           1柜         31
    1           2柜         9
    2           1柜         21
    2           2柜         10
    3           3柜         13
    3           4柜         26
    */
      

  2.   

    select 商品编号,存放位置,sum(datediff(day,存入时间,'2000-02-10')+1)
    from 表 group by 商品编号,存放位置
      

  3.   

    select 商品编号,存放位置,datediff(day,Min(存入时间),'2000-02-10')+1
    from 表 group by 商品编号,存放位置 select 商品编号,存放位置,sum(datediff(day,存入时间,'2000-02-10')+1)
    from 表 group by 商品编号,存放位置 
      

  4.   

    select 商品编号,存放位置,datediff(day,Min(存入时间),'2000-02-10')+1
    from 表 group by 商品编号,存放位置
      

  5.   

    能不能通过一条SQL语句实现?
      

  6.   

    而且商品种类是未知的,union all没办法实现吧
      

  7.   


    从每种商品第一次入柜日期开始,截止到2000-02-10,统计每种商品在每个柜中存放的天数,用一条SQL命令完成
      

  8.   

    select id 商品ID,address 位置,datediff(day,min(time),max(time)) 天数 from table
    group by id,address having max(time)<'2000-02-10'
      

  9.   


    服了你,那我在1楼不是给你算对了吗?不喜欢变量,那就用常量代入,不喜欢换行就取消换行,query部分就是1句SQL。
      

  10.   

    我一直用SQL2000的,开始没看明白你的语句,不好意思,是我愚钝了,再次感谢,提供了很好的解决思路,琢磨了一中午才搞明白原理,谢谢!