读书人

sql 行号有关问题

发布时间: 2012-09-15 19:09:28 作者: rapoo

sql 行号问题
表A记录如下
1 张三
2 张三
3 李四
4 王五
5 张三
上表为:个人登记记录(自动编号,姓名)
如果姓名连续出现两次则算一次

期望查询结果为

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

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




[解决办法]
不太确定你想要哪一种,就写了两个


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 ALLSELECT 2,'张三' UNION ALLSELECT 3,'李四' UNION ALLSELECT 4,'王五' UNION ALLSELECT 5,'张三' UNION ALLSELECT 8,'张三' UNION ALLSELECT 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 )--2SELECT 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 )
[解决办法]
SQL code
DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > ) 

读书人网 >SQL Server

热点推荐