对于列中的选定行,如何从开头到结尾按顺序更新每一行,每行值增加1(或某个数字)。我知道这可以在几秒钟内完成excel但我可以弄清楚如何在SQL服务器中实现。例如:
客户ID现在为NULL 更新客户ID,每行增加1(即第一行= 1,第二行= 2,......第n行= n)
ship-to party customer id
0002018092 NULL
0002008127 NULL
0002000129 NULL
0002031592 NULL
0002034232 NULL
期望的输出
ship-to party customer id
0002018092 1
0002008127 2
0002000129 3
0002031592 4
0002034232 5
此外,对于列中的选定行,如何使用行号更新每一行?我知道有一个row_number()函数,但没有成功产生所需的结果。例如
列A现在为NULL 更新A列,每行增加1(即第一行=第1行,第二行=第2行,第n行=行号n)
任何演示都会非常有帮助。你好
答案 0 :(得分:2)
示例:假设我想为表SomeIntField
中的tblUser
列中的每个值添加一个值
有两种方法可以轻松完成
首先:这只是为每列SomeIntField
添加值1update tblUser set SomeIntField = SomeIntField + 1
第二:这会增加一个递增值,第一行获得+1,第二行获得+2,依此类推......
declare @number int = 0
update tblUser
set @number = @number + 1,
SomeIntField = isnull(SomeIntField, 0) + @Number
编辑:根据您的上一条评论,这可能是您想要的
declare @table table (shiptoparty varchar(50), customer_id int)
insert into @Table (shiptoparty, customer_id)
values ('0002018092', NULL), ('0002008127', NULL), ('0002000129', NULL), ('0002031592', NULL), ('0002034232', NULL)
declare @number int = 0
update @table
set @number = @number + 1,
customer_id = isnull(customer_id, 0) + @Number
select * from @table
结果是:
shiptoparty | customer_id
----------- | -----------
0002018092 | 1
0002008127 | 2
0002000129 | 3
0002031592 | 4
0002034232 | 5
答案 1 :(得分:1)
不要想得很复杂。试试下面给出的简单方法
alter table table_name drop column customer_id
go
alter table table_name add id customer_id IDENTITY(1,1)
go
答案 2 :(得分:0)
使用CTE:
,而不是使用自引用变量WITH CTE AS (
SELECT [Your Incrementing Column],
ROW_NUMBER() OVER (ORDER BY [Columns to Order By]) AS RN
FROM YourTable)
UPDATE CTE
SET [Your Incrementing Column] = RN;
编辑:要证明所有行将会更新:
CREATE TABLE #Sample (String varchar(50),
IncrementingInt int);
INSERT INTO #Sample (String)
VALUES ('sdkfjasdf'),
('dfydsfdfg'),
('sdfgsdfg45yfg'),
('dfgf54d'),
('dsft43tdc'),
('f6gytrntrfu7m45'),
('5d6f45wgby54'),
('g34h636j'),
('jw'),
('h6nw54m'),
('g54j747jm5e5f4w5gsft'),
('ns67mw54mk8o7hr'),
('h45j4w5h4');
SELECT *
FROM #Sample;
WITH CTE AS(
SELECT IncrementingInt,
ROW_NUMBER() OVER (ORDER BY String) AS RN
FROM #Sample)
UPDATE CTE
SET IncrementingInt = RN;
SELECT *
FROM #Sample;
DROP TABLE #Sample;
GO
答案 3 :(得分:0)
第一个问题:
您希望将某列中每行的值增加1(或其他nuber),请尝试以下操作:
@RequestMapping(value="firstMapping",method=RequestMethod.POST)
public ModelAndView firstMapping (HttpServletRequest request) {
Object myObject=new Object();
request.setAttribute("myObject",myObject);
return "forward:/secondMapping";
}
第二个问题:
您希望仅获取某些行的行号。解决方案:首先创建包含所有行号的列,然后获取行:
update TABLE_NAME set column_to_increase = column_to_increase + 1
FYI:select * from (
select column1, column2, ..., columnN, row_number() over (order by (select null)) as [rn] from MY_TABLE
) where *condition*
子句中的select null
什么都不做,就在那里,因为窗函数(例如over
)必须有row_number
子句,其中一些需要over
。
答案 4 :(得分:0)
使用行号
更新每一行尝试以下
CREATE TABLE tmp(Id INT IDENTITY(1,1), Value INT)
INSERT INTO tmp(value) VALUES(1),(2),(3),(4),(5)
UPDATE T
SET
T.Value = B.RowNo
FROM tmp AS T
INNER JOIN (SELECT Id, ROW_NUMBER()OVER(ORDER BY Id) AS RowNo FROM tmp)AS B
ON T.Id = B.Id