现有一个数据表数据结构如下:
id     item     date        qty
001    a        2009-1-1    10
002    b        2009-2-1    11
003    a        2009-2-1    12
004    b        2009-4-1    40
005    a        2009-5-1    20
006    c        2009-1-1    12
007    a        2009-3-1    15
008    c        2009-2-1    18
009    b        2009-3-1    40
010    a        2009-4-1    30怎么得出一定时间段内 a,b,c 出现的次数、id、date和qty
例如:2个月内。请高手帮忙想想办法,谢谢了!

解决方案 »

  1.   


    select item, sum(qty) as qty
    from tb
    where date between dateadd(month,-2,getdate()) and getdate()
    group by item
      

  2.   


    select item, sum(qty) as qty
    from tb
    where date between dateadd(month,-2,getdate()) and getdate()
    group by item
      

  3.   

    select id , date , sum(qty) qty from tb where ... group by id , dateselect id , date , sum(qty) qty from tb where datediff(mm,date,getdate()) <= 2 group by id , dateselect id , date , sum(qty) qty from tb where datediff(mm,date,getdate()) <= 1 or (datediff(mm,date,getdate()) and right(convert(varchar(10),date,120),5) > right(convert(varchar(10),getdate(),120),5)) group by id , date
      

  4.   

    select 
      a.item,a.date,b.qty,b.次数
    from
     tb a,
     (select item, sum(qty) as qty,count(1) as  次数 from tb group by item)b
    where
     a.item=b.item
      

  5.   

    select 
      a.item,a.date,b.qty,b.次数
    from
     tb a,
     (select item, sum(qty) as qty,count(1) as  次数 from tb group by item)b
    where
     a.item=b.item
    and
     a.date between dateadd(month,-2,getdate()) and getdate()
      

  6.   

    select sum(case item when 'a' then 1 else 0 end) a
    ,sum(case item when 'b' then 1 else 0 end) b
    ,sum(case item when 'c' then 1 else 0 end) c
    from t
    where DATEDIFF(month, getdate(),date ) =2
      

  7.   

    select item , sum(qty) qty from tb where ... group by item select item , sum(qty) qty from tb where datediff(mm,date,getdate()) <= 2 group by item select item , sum(qty) qty from tb where datediff(mm,date,getdate()) <= 1 or (datediff(mm,date,getdate()) and right(convert(varchar(10),date,120),5) > right(convert(varchar(10),getdate(),120),5)) group by item