sql 行号问题

hvang1988 2012-09-06 02:44:10
表A记录如下
1 张三
2 张三
3 李四
4 王五
5 张三
上表为:个人登记记录(自动编号,姓名)
如果姓名连续出现两次则算一次

期望查询结果为

编号,姓名
1,张三
2,李四
3,王五
4,张三

用excel 我可以比较两行之间的关系,sql没有,不知怎么处理


...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hvang1988 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code

DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
这个函数的话,可以处理成同一个人需要相同,但是如果拿你的例子来说,那么李四的编号将是3,因为前面有两个并列1.
[/Quote]
这个函数用于类似学生成绩排名最恰当,但是不是我要的
hvang1988 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不太确定你想要哪一种,就写了两个



SQL code


--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT,[name] VARCHAR(4))
INSERT [tb]
SELECT 1,'张三' UNION ALL
SELECT……
[/Quote]
需要的是第一种
通过子查询比较当前行号和下一行号,我怎么就没想到呢
你的代码能执行,非常感谢
發糞塗牆 2012-09-06
  • 打赏
  • 举报
回复
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )
这个函数的话,可以处理成同一个人需要相同,但是如果拿你的例子来说,那么李四的编号将是3,因为前面有两个并列1.
汤姆克鲁斯 2012-09-06
  • 打赏
  • 举报
回复
不太确定你想要哪一种,就写了两个



--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT,[name] VARCHAR(4))
INSERT [tb]
SELECT 1,'张三' UNION ALL
SELECT 2,'张三' UNION ALL
SELECT 3,'李四' UNION ALL
SELECT 4,'王五' UNION ALL
SELECT 5,'张三' UNION ALL
SELECT 8,'张三' UNION ALL
SELECT 9,'张三' UNION ALL
SELECT 11,'张三' UNION ALL
SELECT 12,'王五'
--------------开始查询--------------------------

--1
;WITH cte AS
(
SELECT *,row_id=ROW_NUMBER() OVER(ORDER BY id) FROM [tb]
)
SELECT id=ROW_NUMBER() OVER(ORDER BY id),name FROM cte AS a
WHERE NOT EXISTS(SELECT 1 FROM cte WHERE [name]=a.[name] AND [row_id]=a.[row_id]-1 )
--2
SELECT id=ROW_NUMBER() OVER(ORDER BY id),name FROM [tb] AS a
WHERE NOT EXISTS(SELECT 1 FROM [tb] WHERE [name]=a.[name] AND [id]=a.[id]-1 )

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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