Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 正在更新ID不断增加的Sql Server行_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 正在更新ID不断增加的Sql Server行

Sql server 正在更新ID不断增加的Sql Server行,sql-server,sql-server-2008,Sql Server,Sql Server 2008,如何根据另一列使用增加的ID更新sql server 我有一个具有以下结构的表: sn name val test 0 test 0.5 test 2 test1 0 test1 0.5 test1 2 我如何更新它,以便: sn name val 1 test 0 2 test 0.5 3 test 2 1 test1

如何根据另一列使用增加的ID更新sql server

我有一个具有以下结构的表:

sn  name    val
    test     0
    test     0.5
    test     2
    test1    0
    test1    0.5
    test1     2
我如何更新它,以便:

sn  name      val
1    test      0
2    test      0.5
3    test      2
1    test1     0
2    test1     0.5
3    test1     2

使用cte和行号

以下是一个例子:

create table #mytable (sn int, name varchar(20), val money)

insert into #mytable values (null, 'test', 0.5)
insert into #mytable values (null, 'test', 1)
insert into #mytable values (null, 'test1', 0.5)
insert into #mytable values (null, 'test1', 1)

;with cte as (select row_number() over (order by name, val) as rn, * from #mytable)
update cte set sn = rn

select * from #mytable
使用cte和行号

以下是一个例子:

create table #mytable (sn int, name varchar(20), val money)

insert into #mytable values (null, 'test', 0.5)
insert into #mytable values (null, 'test', 1)
insert into #mytable values (null, 'test1', 0.5)
insert into #mytable values (null, 'test1', 1)

;with cte as (select row_number() over (order by name, val) as rn, * from #mytable)
update cte set sn = rn

select * from #mytable

如果表中有键列,则可以使用和轻松完成此操作。我添加了一列:
Id int-identity主键
,下面是更新:

;with RowNumberedData as (
  select 
    id, 
    row_number() over (
      partition by name
      order by id
    ) as rowno
  from sql_test
)
update s
  set sn = r.rowno
from sql_test s
join RowNumberedData r
  on s.id = r.id;

SQLFIDLE:

如果表中有键列,则可以使用和轻松完成此操作。我添加了一列:
Id int-identity主键
,下面是更新:

;with RowNumberedData as (
  select 
    id, 
    row_number() over (
      partition by name
      order by id
    ) as rowno
  from sql_test
)
update s
  set sn = r.rowno
from sql_test s
join RowNumberedData r
  on s.id = r.id;

SQLFiddle:

您应该使用
行数()
函数。此外,只要您必须为每个名称值启动新计数器,您就应该在此语句中使用
partton by NAME

WITH T AS 
(select sql_test.*,
        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Val) as RowNumber
        from sql_test)
UPDATE T SET SN=RowNumber;

您应该使用
行编号()
函数。此外,只要您必须为每个名称值启动新计数器,您就应该在此语句中使用
partton by NAME

WITH T AS 
(select sql_test.*,
        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Val) as RowNumber
        from sql_test)
UPDATE T SET SN=RowNumber;

我想你错过了一次聚会