【SQL】使用ROW_NUMBER() OVER 实现DISTINCT功能

准备数据如下:

SELECT [Id],[Name]FROM [ElvinTest].[dbo].[Employee]

===========================================

Id          Name
---------------------
1           熊战士
2           熊战士
3           熊战士
4           Obama
5           Matin
6           Matin
7           Matin
8           Matin

增加 ROW_NUMBER()OVER

SELECT [Id]

      ,[Name]    

      ,ROW_NUMBER()OVER(ORDERBY name) as RowNum

FROM [ElvinTest].dbo.[Employee]

===============================================
Id         Name   RowNum
---------------------------------
5          Matin     1
6          Matin     2
7          Matin     3
8          Matin     4
4          Obama  5
1          熊战士   6
2          熊战士   7
3          熊战士   8

分组进行ROW_NUMBER()OVER

SELECT [Id]

      ,[Name]    

      ,ROW_NUMBER()OVER(PARTITIONBY name ORDERBY name)as RowNum

FROM [ElvinTest].dbo.[Employee]

========================================================================
Id          Name       RowNum
------------------------------------------
5           Matin         1
6           Matin         2
7           Matin         3
8           Matin         4
4           Obama      1
1           熊战士       1
2           熊战士       2
3           熊战士       3

去除重复:

SELECT [Id],[Name]FROM

(

      SELECT[Id]

             ,[Name]    

             ,ROW_NUMBER()OVER(PARTITIONBY name  ORDER BY name) as RowNum

      FROM[ElvinTest].dbo.[Employee]

) T

WHERE T.RowNum= 1

====================================================================
Id          Name
-----------------
5           Matin
4           Obama
1           熊战士
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值