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

请帮忙,求一SQL查询语句!
'表里有a b c 三个类别的产品 ,产品数量有N多,各类别也各占了很多! 想请教,如何能把 a b c 这三个类别的产品,每个类别都只提取10条数据?

------解决方案--------------------
如果类别确定,即语句中可以使用类别值来检测

select top 10 * from tb where class='a'
union
select top 10 * from tb where class='b'
union
select top 10 * from tb where class='c'

如果类别不定,即语句中不使用类别值来检测 (设id,是不重复的,可比较大小的列)

select id,name from tb a where id in(select top 10 id from tb where class=a.class order by id) --每类取id最小的10条
select id,name from tb a where id in(select top 10 id from tb where class=a.class order by id desc)--每类取id最大的10条
--或是
select id,name from tb a where 10>=(select count(1) from tb where class=a.class and id<a.id) --每类取id最小的10条
select id,name from tb a where 10>=(select count(1) from tb where class=a.class and id>a.id) --每类取id最大的10条