日期:2014-05-18  浏览次数:20525 次

50分求一查询语句
test表
ID     Type     name
1         狗         吉娃娃
2         狗         藏獒
3  狗  哈斯其
4  猫  波斯猫
5  猫  白猫
6  猫  黑猫
7  兔  黄兔
8  兔  白兔
9  兔  黑兔
有张类似的表,其中类型列不止这些品种,我现在想显示出每个品种里的两种,请问SQL语句应该怎么写,谢谢

------解决方案--------------------
select * from 表 a where id in (select top 2 id from 表 where type=a.type order by id )
------解决方案--------------------
Select * from 表 as a where name in
(Select top 2 name from 表 where type=a.type)

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

Select * From TEST A
Where (Select Count(ID) From TEST Where Type = A.Type And ID < A.ID) < 2

Or

Select * From TEST A
Where (Select Count(ID) From TEST Where Type = A.Type And ID > A.ID) < 2
------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(ID int,Type varchar(10),name varchar(10))
insert into tb(ID,Type,name) values(1, '狗 ', '吉娃娃 ')
insert into tb(ID,Type,name) values(2, '狗 ', '藏獒 ')
insert into tb(ID,Type,name) values(3, '狗 ', '哈斯其 ')
insert into tb(ID,Type,name) values(4, '猫 ', '波斯猫 ')
insert into tb(ID,Type,name) values(5, '猫 ', '白猫 ')
insert into tb(ID,Type,name) values(6, '猫 ', '黑猫 ')
insert into tb(ID,Type,name) values(7, '兔 ', '黄兔 ')
insert into tb(ID,Type,name) values(8, '兔 ', '白兔 ')
insert into tb(ID,Type,name) values(9, '兔 ', '黑兔 ')

select * from tb t
where name in
(
select top 2 name from tb where type=t.type order by name
)

drop table tb
/*
ID Type name
----------- ---------- ----------
2 狗 藏獒
3 狗 哈斯其
4 猫 波斯猫
5 猫 白猫
8 兔 白兔
9 兔 黑兔

(所影响的行数为 6 行)
*/