取前几条记录问题

libaodong 2008-11-10 08:49:25
数据库表中某一列的值重复出现多次,但是我只想查出前两次的记录,请问这样的SQL语句应该怎样写?

例如 : 01 000001 A
01 000002 A
01 000001 B
01 000003 B
01 000001 C
01 000002 C

我想查出的结果是:
01 000001 A
01 000002 A
01 000001 B
01 000003 B
01 000002 C

就是说当这个值出现3次以上,我只要前两次,不足3次的都显示出来。
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 libaodong 的回复:]
ROW_NUMBER() ,好像SQL2000没有这个函数
[/Quote]
ROW_NUMBER()是sql 2005及以后版本的函数.
cxmcxm 2008-11-11
  • 打赏
  • 举报
回复
必须有一列来确定顺序,以确定前2次是那2次
比如000001,有a,b,c3个值,是取a,b还是取a,c 或b,c,必须
再有一列来排定顺序
libaodong 2008-11-11
  • 打赏
  • 举报
回复
虽然在别的帖子里找到答案,但还是要谢谢大家的帮助!
jimoshatan 2008-11-11
  • 打赏
  • 举报
回复

/**NAME区最大**/
CREATE TABLE #A (code VARCHAR(10),s_no VARCHAR(10),s_name VARCHAR(10))
INSERT INTO #A
SELECT '01','000001','A' UNION ALL
SELECT '01','000002','A' UNION ALL
SELECT '01','000001','B' UNION ALL
SELECT '01','000003','B' UNION ALL
SELECT '01','000001','C' UNION ALL
SELECT '01','000002','C'

SELECT * FROM #A A
WHERE (SELECT COUNT(*) FROM #A WHERE CODE=A.CODE AND S_NO=A.S_NO AND S_NAME<A.S_NAME)<2

DROP TABLE #A

/**
01 000001 A
01 000002 A
01 000001 B
01 000003 B
01 000002 C
rucypli 2008-11-10
  • 打赏
  • 举报
回复
select top 2 * from tb where col3='A'
union all
select top 2 * from tb where col3='B'
union all
select top 2 * from tb where col3='C'
水族杰纶 2008-11-10
  • 打赏
  • 举报
回复
--2000
if object_id('tempdb..#')is not null drop table #
go
create TABLE # (col1 VARCHAR(2),col2 VARCHAR(6),col3 VARCHAR(1))
INSERT INTO #
SELECT '01','000001','A' UNION ALL
SELECT '01','000002','A' UNION ALL
SELECT '01','000001','B' UNION ALL
SELECT '01','000003','B' UNION ALL
SELECT '01','000001','C' UNION ALL
SELECT '01','000002','C'
alter table #
add id int identity(1,1)
go
select col1,col2,col3 from (
select cnt=(select count(*)+1 from # where col2=t.col2 and id<t.id),* from # t
)t
where cnt<=2 order by col1,col3,col2
/*col1 col2 col3
---- ------ ----
01 000001 A
01 000002 A
01 000001 B
01 000003 B
01 000002 C

(所影响的行数为 5 行)*/
libaodong 2008-11-10
  • 打赏
  • 举报
回复
ROW_NUMBER() ,好像SQL2000没有这个函数
liangCK 2008-11-10
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
-- Date : 2008-11-10 20:52:38
---------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (col1 VARCHAR(2),col2 VARCHAR(6),col3 VARCHAR(1))
INSERT INTO @T
SELECT '01','000001','A' UNION ALL
SELECT '01','000002','A' UNION ALL
SELECT '01','000001','B' UNION ALL
SELECT '01','000003','B' UNION ALL
SELECT '01','000001','C' UNION ALL
SELECT '01','000002','C'

--SQL查询如下:

SELECT col1,col2,col3
FROM
(
SELECT *,
rid=ROW_NUMBER()
OVER(PARTITION BY col2 ORDER BY col1)
FROM @T
) AS T
WHERE rid<=2
ORDER BY col1,col3,col2

/*
col1 col2 col3
---- ------ ----
01 000001 A
01 000002 A
01 000001 B
01 000003 B
01 000002 C

(5 行受影响)

*/
libaodong 2008-11-10
  • 打赏
  • 举报
回复
就是000001这列
liangCK 2008-11-10
  • 打赏
  • 举报
回复
某一列出现多次..这一列不明确?..

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧