对SQL Server中的行重新编号
我对SQL Server有点陌生,我有以下问题:是否有可能对列中的行重新编号 例如:对SQL Server中的行重新编号,sql,sql-server,tsql,select,Sql,Sql Server,Tsql,Select,我对SQL Server有点陌生,我有以下问题:是否有可能对列中的行重新编号 例如: id date name 1 2016-01-02 John 2 2016-01-02 Jack 3 2016-01-02 John 4 2016-01-02 John 5 2016-01-03 Jack 6 2016-01-03 Jack 7 2016-01-04 John 8 2016-01-03 Jack 9 2016-
id date name
1 2016-01-02 John
2 2016-01-02 Jack
3 2016-01-02 John
4 2016-01-02 John
5 2016-01-03 Jack
6 2016-01-03 Jack
7 2016-01-04 John
8 2016-01-03 Jack
9 2016-01-02 John
10 2016-01-04 Jack
我希望所有的“Johns”都以id 1开始,然后继续(2、3、4等),当“John”完成时(5、6、7等),所有的“Jacks”都有以下数字。谢谢 id应该只是用于连接等的内部标识符-我不会更改它。但您可以使用窗口函数查询此类编号:
SELECT ROW_NUMBER() OVER (ORDER BY CASE name WHEN 'John' THE 1 ELSE 2 END) AS rn,
date,
name
FROM mytable
我希望这有帮助
declare @t table (id int ,[date] date,name varchar(20))
insert into @t
( id, date, name )
values (1,'2016-01-02','John')
,(2,'2016-01-02','Jack')
,(3,'2016-01-02','John')
,(4,'2016-01-02','John')
,(5,'2016-01-03','Jack')
,(6,'2016-01-03','Jack')
,(7,'2016-01-04','John')
,(8,'2016-01-03','Jack')
,(9,'2016-01-02','John')
,(10,'2016-01-04','Jack')
select
row_number() over(order by name,[date]) as ID,
date ,
name
from
@t
order by name
您可以使用
ROW\u NUMBER
window函数根据需要对行重新编号,而不是对id列重新编号。例如:
SELECT ROW_NUMBER() OVER(PARTITION BY name ORDER BY date) as rowid,date,name
FROM tablename
如果
id
是主键,则不应更改其值。我认为这是一个关键问题:)。。你能标记你的数据库管理系统吗?你为什么要这样做?Tim是对的:如果id
是主键,那么没有必要这样做(如果该表被其他人引用,这将非常困难)为什么?id只是一个id,没有其他意义。@cdrrr如果你有21个Johns呢?