这个问题想了很久也想不出来,数据如下:
编号  品名   数量    日期           供商 
1011  a    10    2009-01-01     001
1011  a    1     2009-01-01     002
1011  a    3     2009-01-03     001 
1012  b    3     2009-01-01     001
1012  b    5     2009-01-02     003
1012  b    5     2009-01-02     003我想得到以下结果:
编号  品名   数量    日期           供商 
1011  a     14    2009-01-03   001
1012  b     13    2009-01-02   003
说明一下:结果是取每个编号最后一个日期及对应的供商,只要一个值,并且数量是要相加的,请帮帮我

解决方案 »

  1.   

    select
      a.编号,
      a.品名,
      b.数量,
      a.日期,
      a.供商
    from
      tb a,
      (select 编号,sum(数量) as 数量 from tb group by 编号) b
    where
      a.编号=b.编号
    and
      not exists(select 1 from tb where 编号=a.编号 and 日期>a.日期)
      

  2.   

    create table #TT2
    (
      编号 varchar(10),
      品名 varchar(20),
      数量 int,
      日期 datetime,
      供商 varchar(10)
    )
    insert into #TT2 select '1011','a',10,'2009-01-01','001'
    union all select '1011','a',1,'2009-01-01','002'
    union all select '1011','a',3,'2009-01-03','001'
    union all select '1012','b',3,'2009-01-01','001'
    union all select '1012','b',5,'2009-01-02','003'
    union all select '1012','b',5,'2009-01-02','003'select distinct t1.供商,t.* from 
    (
     select 编号,品名,sum(数量) 数量,max(日期) 日期 from #TT2 group by 编号,品名
    ) t join #TT2 t1 on t.编号=t1.编号 and t.日期=t1.日期 and t.品名=t1.品名
      

  3.   

    select distinct t1.供商,t.* from 
    (
     select 编号,品名,sum(数量) 数量,max(日期) 日期 from #TT2 group by 编号,品名
    ) t
     join #TT2 t1 
    on t.编号=t1.编号 and t.日期=t1.日期 and t.品名=t1.品名供商         编号         品名                   数量          日期
    ---------- ---------- -------------------- ----------- -----------------------
    001        1011       a                    14          2009-01-03 00:00:00.000
    003        1012       b                    13          2009-01-02 00:00:00.000(2 行受影响)
      

  4.   

    SELECT T.编号,T.品名,数量,日期,供商 FROM
    (SELECT 编号,品名,SUM(数量)数量 FROM TB GROUP BY 编号,品名)AS T,
    (SELECT 编号,MAX(日期)AS 日期,供商 FROM TB GROUP BY 编号,供商)AS T1
    WHERE T.编号=T1.编号
      

  5.   


    create table TB
    (
      编号 varchar(10),
      品名 varchar(20),
      数量 int,
      日期 datetime,
      供商 varchar(10)
    )
    insert into TB select '1011','a',10,'2009-01-01','001'
    union all select '1011','a',1,'2009-01-01','002'
    union all select '1011','a',3,'2009-01-03','001'
    union all select '1012','b',3,'2009-01-01','001'
    union all select '1012','b',5,'2009-01-02','003'
    union all select '1012','b',5,'2009-01-02','003'SELECT  DISTINCT T.编号,T.品名,T.数量,T3.日期,T3.供商 FROM
    (SELECT 编号,品名,SUM(数量)数量 FROM TB GROUP BY 编号,品名)AS T,
    (SELECT 编号,MAX(日期)AS 日期 FROM TB GROUP BY 编号)AS T1,
    (SELECT * FROM TB WHERE EXISTS(SELECT * FROM (SELECT 编号,MAX(日期)AS 日期 FROM TB GROUP BY 编号) AS T2 WHERE TB.编号=T2.编号 AND TB.日期=T2.日期))AS T3
    WHERE T.编号=T1.编号 AND T3.编号=T.编号编号         品名                   数量          日期                                                     供商         
    ---------- -------------------- ----------- ------------------------------------------------------ ---------- 
    1011       a                    14          2009-01-03 00:00:00.000                                001
    1012       b                    13          2009-01-02 00:00:00.000                                003(所影响的行数为 2 行)
      

  6.   

    create table tb(编号 varchar(10), 品名 varchar(20), 数量 int, 日期 datetime, 供商 varchar(10))
    insert into tb select '1011','a',10,'2009-01-01','001'
    union all select '1011','a',1,'2009-01-01','002'
    union all select '1011','a',3,'2009-01-03','001'
    union all select '1012','b',3,'2009-01-01','001'
    union all select '1012','b',5,'2009-01-02','003'
    union all select '1012','b',5,'2009-01-02','003'
    select *,(select top 1 供商 from tb where 编号=a.编号 and 日期=a.日期) as 供商 from (
    select 编号,品名,sum(数量) as 数量,max(日期) as 日期 from tb group by 编号,品名
    )a 
    go
    drop table tb
    /*
    编号         品名                   数量          日期                      供商
    ---------- -------------------- ----------- ----------------------- ----------
    1011       a                    14          2009-01-03 00:00:00.000 001
    1012       b                    13          2009-01-02 00:00:00.000 003
    */
      

  7.   

    后面两行都是一样的,加个distinct过滤重复即可select
      distinct
      a.编号,
      a.品名,
      b.数量,
      a.日期,
      a.供商
    from
      tb a,
      (select 编号,sum(数量) as 数量 from tb group by 编号) b
    where
      a.编号=b.编号
    and
      not exists(select 1 from tb where 编号=a.编号 and 日期>a.日期)
      

  8.   

    select distinct t1.供商,t.* from 
    (
     select 编号,品名,sum(数量) 数量,max(日期) 日期 from #TT2 group by 编号,品名
    ) t
     join #TT2 t1 
    on t.编号=t1.编号 and t.日期=t1.日期 and t.品名=t1.品名
      

  9.   

    谢谢各位咯,试了一下,ws_hgo和josy后来改的都可以,简单实用,所以加分给二位.