有以下表结构:
id  value1 value2
a     1       1
a      2      2 
a      1       1
b      3       3
b      2        2
b      1       1
c       1      1
c       2       2
c       1      1我想从各id中取出各自的第一条纪录即以下结果:
id  value1   value2
a    1        1
b     3       3
c     1       1
应该怎么写呢?大家帮帮忙
 

解决方案 »

  1.   

    表:a
    id name
    11 aaaa
    11 bbbb
    11 cccc
    22 dddd
    22 eeee
    22 ffff
     
    如何将表中的相同id号的第一条记录取出来?即:
    id name
    11 aaaa
    22 dddd
    CREATE TABLE #a (
           [id] [char] (10),
           [name] [char] (10) 
    )insert into #a(id,name) values('11','aaaa')  
    insert into #a(id,name) values('11','bbbb')  
    insert into #a(id,name) values('11','cccc')  
    insert into #a(id,name) values('22','dddd')  
    insert into #a(id,name) values('22','eeee')  
    insert into #a(id,name) values('22','ffff')  select * from #a b
    where name=(select top 1 name from #a where id=b.id)drop table #aid         name       
    ---------- ---------- 
    11         aaaa      
    22         dddd      (所影响的行数为 2 行)
    CREATE TABLE #a (
           [id] [char] (10),
           [name] [char] (10) 
    )insert into #a(id,name) values('11','aaaa')  
    insert into #a(id,name) values('11','bbbb')  
    insert into #a(id,name) values('11','cccc')  
    insert into #a(id,name) values('22','dddd')  
    insert into #a(id,name) values('22','eeee')  
    insert into #a(id,name) values('22','ffff')  select id1=identity(int,1,1),* into #t from #a
    go
    select id,name from #t where id1 in(select min(id1) from #t group by id)drop table #a
    drop table #tid         name       
    ---------- ---------- 
    11         aaaa      
    22         dddd      (所影响的行数为 2 行)id   分类
    1     a
    2     b
    3     c
    4     b
    5     b
    6     a
    7     c
    8     a
    9     ccreate table T(id int, type varchar(10))
    insert T select 1,     'a'
    union all select 2,     'b'
    union all select 3,     'c'
    union all select 4,     'b'
    union all select 5,     'b'
    union all select 6,     'a'
    union all select 7,     'c'
    union all select 8,     'a'
    union all select 9,     'c'select * from T as tmp
    where (select count(*) from T where type=tmp.type and id<tmp.id)<2
    order by typedrop table t
    --result
    id          type       
    ----------- ---------- 
    1           a
    6           a
    2           b
    4           b
    3           c
    7           c(6 row(s) affected)
      

  2.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb(id varchar(1),value1 int,value2 int)
    insert into tb(id,value1,value2) values('a',1,1)
    insert into tb(id,value1,value2) values('a',2,2)
    insert into tb(id,value1,value2) values('a',1,1)
    insert into tb(id,value1,value2) values('b',3,3)
    insert into tb(id,value1,value2) values('b',2,2)
    insert into tb(id,value1,value2) values('b',1,1)
    insert into tb(id,value1,value2) values('c',1,1)
    insert into tb(id,value1,value2) values('c',2,2)
    insert into tb(id,value1,value2) values('c',1,1)
    goselect id1=identity(int,1,1) , * into test from tbselect a.id,a.value1,a.value2 from test a,
    (select id,min(id1) id1 from test group by id) b
    where a.id = b.id and a.id1 = b.id1drop table tb,test/*
    id   value1      value2      
    ---- ----------- ----------- 
    a    1           1
    b    3           3
    c    1           1(所影响的行数为 3 行)*/
      

  3.   

    CREATE TABLE #a (  [id] [char] (10),  [value1] [int] ,[value2] [int] )
    insert into #a(id,value1,value2) values('a',1,1)  
    insert into #a(id,value1,value2) values('a',2,2)  
    insert into #a(id,value1,value2) values('a',1,1)  
    insert into #a(id,value1,value2) values('b',3,3)  
    insert into #a(id,value1,value2) values('b',2,2)  
    insert into #a(id,value1,value2) values('b',1,1) 
    insert into #a(id,value1,value2) values('c',1,1)  
    insert into #a(id,value1,value2) values('c',2,2)  
    insert into #a(id,value1,value2) values('c',1,1) select id1=identity(int,1,1),* into #t from #aselect id,value1,value2 from #t a
    where not exists(select 1  from #t 
                 where a.id = id and a.id1 > id1)
    drop table #adrop table #t/*id         value1      value2      
    ---------- ----------- ----------- 
    a          1           1
    b          3           3
    c          1           1
    */