日期:2014-05-19  浏览次数:20463 次

一个应该简单的问题
有以下表结构:
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
应该怎么写呢?大家帮帮忙
 


------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create 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)
go

select id1=identity(int,1,1) , * into test from tb

select 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.id1

drop table tb,test

/*
id value1 value2
---- ----------- -----------
a 1 1
b 3 3
c 1 1

(所影响的行数为 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 #a

select id,value1,value2 from #t a
where not exists(select 1 from #t
where a.id = id and a.id1 > id1)
drop table #a

drop table #t

/*

id value1 value2
---------- ----------- --