SQL Server中的Row_number函数 [英] Row_number function in SQL server

查看:100
本文介绍了SQL Server中的Row_number函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我有一个关于使用sql server的ROW_NUMBER()函数的douts,

i有两个示例查询,如下所示,

我的问题是我的第一个查询工作正常,因为它避免重复的数据,与我的实际表数据相比

但我的第二个查询并不是避免重复值以及我的SN号总是显示1

但是我想显示我的SN号应该是自动增量。

那我怎么能实现这个解决方案,请帮帮我。



我的实际表格数据是:



id

----

ajson1

ajson1

ajson3

ajson4



查询1:

从json订单中选择DISTINCT id by id asc

OUTPUT:

id

---- -

ajson1

ajson3

ajson4



查询2:

SELECT

(选择DIST INCT ROW_NUMBER()OVER(订购AS ASC))AS SN,

id

来自json



输出:

SN id

- -----

1 ajson1

1 ajson1
1 ajson3

1 ajson4





提前感谢



我尝试了什么:



sql server中的Row_Number函数

解决方案

试试这个



   T(id) as  select   distinct  id 来自 json)
SELECT ' RowNo' = ROW_NUMBER() OVER ORDER BY id ASC ),id 来自 T


使用你已经拥有的东西你可以做到这一点...

  SELECT  id,min(SN) FROM  

SELECT id,
ROW_NUMBER() OVER ORDER BY id ASC AS SN
FROM json
)src GROUP BY id



哪个摆脱你的副本,只显示最低的行号

 ajson1 1 
ajson3 3
ajson4 4



但是如果你想要一个自动增加的行号,你应该考虑使用IDENTITY列在桌子上。这将始终是唯一的 - 即使删除了记录并随后添加了其他记录,并且任何特定行始终具有相同的编号。例如。

  create   table  json2 

sn < span class =code-keyword> int identity 1 1 ),
id varchar (max)

insert into json2 values
' ajson1'),
' < span class =code-string> ajson1'),
' ajson3'),
' ajson4'

选择 min(sn),id
来自 json2
group by id

注意sql如何更简单



但是,如果您想要的结果实际上是

 ajson1 1 
ajson3 2
ajson4 3

然后查询就是

  SELECT  id,ROW_NUMBER() OVER  ORDER   BY  id  ASC  AS  SN 
FROM json
group by id


Hi All,

I have a douts about ROW_NUMBER() funcction using sql server,
i have a two sample query like below,
My problem is my fist query is working fine because its avoiding duplicate datas, compare to my actual table data
But my second query is not avoiding duplicate values as well as my SN number always showing 1
but i want to show my SN number should be autoincrement.
So how can i achieve this solution, please help me.

My Actual table data is:

id
----
ajson1
ajson1
ajson3
ajson4

query 1:
select DISTINCT id from json order by id asc
OUTPUT:
id
-----
ajson1
ajson3
ajson4

query 2:
SELECT
(SELECT DISTINCT ROW_NUMBER() OVER(ORDER BY id ASC)) AS SN,
id
FROM json

OUTPUT:
SN id
-- -----
1 ajson1
1 ajson1
1 ajson3
1 ajson4


thanks in advance

What I have tried:

Row_Number function in sql server

解决方案

try this

with T(id) as ( select distinct id from json )
SELECT  'RowNo'=ROW_NUMBER()   OVER(ORDER BY id ASC) , id from T


Working with what you already have you could do this ...

SELECT id, min(SN) FROM
(
	SELECT id,
	ROW_NUMBER() OVER(ORDER BY id ASC) AS SN
	FROM json
) src GROUP BY id


Which gets rid of your duplicate and only shows the lowest row number

ajson1	1
ajson3	3
ajson4	4


But if you want an auto-increment row number then you should consider using an IDENTITY column on the table itself. This will always be unique - even if records are deleted and others subsequently added and any specific row will always have the same number. E.g.

create table json2
(
	sn int identity(1,1),
	id varchar(max)
)
insert into json2 values
('ajson1'),
('ajson1'),
('ajson3'),
('ajson4')

select min(sn), id
from json2
group by id

Notice how the sql is a little simpler

However, if the results you wanted were actually

ajson1	1
ajson3	2
ajson4	3

then the query would just be

SELECT id, ROW_NUMBER() OVER(ORDER BY id ASC) AS SN
FROM json
group by id


这篇关于SQL Server中的Row_number函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆