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

求助一个SQL排序问题!
如表结构如下:
ID  姓名
1  BBB
2  BBB
3  BBB
4  DDD
5  CCC
6  AAA
我想要一个SQL语句,使结果为 BBB   DDD   CCC   AAA   ,即姓名中没有重复值,但顺序却要按ID   来排列,能实现否?

------解决方案--------------------

declare @tab table(ID int,cname varchar(50))

insert @tab values(1, 'BBB ')
insert @tab values(2, 'BBB ')
insert @tab values(3, 'BBB ')
insert @tab values(4, 'DDD ')
insert @tab values(5, 'CCC ')
insert @tab values(6, 'AAA ')

--select * from @tab


select [id]=max(Id),cname from @tab
group by cname
order by id
------解决方案--------------------
BBB DDD CCC AAA
-----------------------

显示为多行还是一行?


--如果显示为多行:

select
max(Id) as id,
cname from @tab
group by cname
order by max(Id)
------解决方案--------------------
select * from(
select min(id) min_id, 姓名 from tb group by tb.姓名
)
order by min_id

注意:如果bbb有ID 1和3,而ddd的id为2,那bbb和ddd哪个排在前面?
------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(ID int,姓名 varchar(10))
insert into tb(ID,姓名) values(1, 'BBB ')
insert into tb(ID,姓名) values(2, 'BBB ')
insert into tb(ID,姓名) values(3, 'BBB ')
insert into tb(ID,姓名) values(4, 'DDD ')
insert into tb(ID,姓名) values(5, 'CCC ')
insert into tb(ID,姓名) values(6, 'AAA ')
go
select min(id) id , 姓名 from tb group by 姓名 order by id
select max(id) id , 姓名 from tb group by 姓名 order by id

drop table tb

/*
id 姓名
----------- ----------
1 BBB
4 DDD
5 CCC
6 AAA

(所影响的行数为 4 行)

id 姓名
----------- ----------
3 BBB
4 DDD
5 CCC
6 AAA

(所影响的行数为 4 行)

*/