读书人

一个应该简单的有关问题

发布时间: 2012-02-24 16:30:38 作者: rapoo

一个应该简单的问题
有以下表结构:
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
---------- ----------- -----------
a 1 1


b 3 3
c 1 1
*/

读书人网 >SQL Server

热点推荐