关于选择记录的sql语句
请教高手,用sql语句怎么取每个类别中的几条记录?比如,有A、B、C类,我想每个类取2条记录(但不一定是2条)。补充:选1条的就不用说了,用groupby就可以,要的是多...
请教高手,
用sql语句怎么取每个类别中的几条记录?
比如,有A、B、C类,我想每个类取2条记录(但不一定是2条)。
补充:选1条的就不用说了,用group by就可以,要的是多条记录的。
id type
1 A
2 B
3 A
4 A
5 C
……
请多多指点。
晕,三个类只是泛指,如果有十几个类,那岂不是union all十几次?这方法不好吧。
ytbelwxg 的也不行,那只能选最前的两条,而不是每个类别两次。 展开
用sql语句怎么取每个类别中的几条记录?
比如,有A、B、C类,我想每个类取2条记录(但不一定是2条)。
补充:选1条的就不用说了,用group by就可以,要的是多条记录的。
id type
1 A
2 B
3 A
4 A
5 C
……
请多多指点。
晕,三个类只是泛指,如果有十几个类,那岂不是union all十几次?这方法不好吧。
ytbelwxg 的也不行,那只能选最前的两条,而不是每个类别两次。 展开
5个回答
展开全部
select top 2 * from table where type='A'
union
select top 2 * from table where type='B'
union
select top 2 * from table where type='C'
union
select top 2 * from table where type='B'
union
select top 2 * from table where type='C'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select top 2 id,type from table where type in (select distinct type from table)
以上,希望对你有所帮助
以上,希望对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假设表名为table1,将以下语句全选后复制粘贴,F5运行即可。
@recordcount 变量为每个类选取几条记录,返回表ls_table1,可用 select * from ls_table1 察看结果。
如果需要常用,建议改写为存储过程或者表函数,调用更方便一些。
如果你只想要一条查询语句解决的话,不想这么复杂的话,除了多用几个union all之外,别无他法。
delcare @recordcount int, @currentcount
set @recordcount = 2
set @currentcount = 0
if exists (select * from sysobjects where type = 'u' and name = 'ls_table1' ) drop table ls_table1
select * into ls_table1 from table1
while @currentcount < @recordcount
begin
insert ls_table1 select a.* from table1 a join (select type, min(id) as id into ls_table1 from table1 c where not exists (select * from ls_table1 c where c.id = d.id ) group by type ) b on a.id = b.id
select @currentcount = @currentcount + 1
end
@recordcount 变量为每个类选取几条记录,返回表ls_table1,可用 select * from ls_table1 察看结果。
如果需要常用,建议改写为存储过程或者表函数,调用更方便一些。
如果你只想要一条查询语句解决的话,不想这么复杂的话,除了多用几个union all之外,别无他法。
delcare @recordcount int, @currentcount
set @recordcount = 2
set @currentcount = 0
if exists (select * from sysobjects where type = 'u' and name = 'ls_table1' ) drop table ls_table1
select * into ls_table1 from table1
while @currentcount < @recordcount
begin
insert ls_table1 select a.* from table1 a join (select type, min(id) as id into ls_table1 from table1 c where not exists (select * from ls_table1 c where c.id = d.id ) group by type ) b on a.id = b.id
select @currentcount = @currentcount + 1
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是oracle,可以这么写
select id,type
from
(
select id,type
row_number() over(partition by type order by id desc) rn
from table1
)
where rn<=2; --取每个分类的一条就改成rn<=1,如果是3条,就改成rn<=3...
select id,type
from
(
select id,type
row_number() over(partition by type order by id desc) rn
from table1
)
where rn<=2; --取每个分类的一条就改成rn<=1,如果是3条,就改成rn<=3...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询