0

我想更新test1表中的一些行。ColumnB必须是 10 11,12,13,14 .... 但是我的桌子

例如:

ColumnA 是父节点。ColumnA+ColumnB 是主键。例如 ColumnA 是 CustomerNumber。B 列是客户的订单号。

create table test1(ColumnA int,  ColumnB int,  ColumnC int);
Insert Into test1 Values(1, 9,123);
Insert Into test1 Values(1, 10,0);
Insert Into test1 Values(1, 10,0);
Insert Into test1 Values(1, 10,0);
Insert Into test1 Values(1, 10,0);
Insert Into test1 Values(2, 12,128);
Insert Into test1 Values(2, 12,0);
Insert Into test1 Values(3, 11,145);
Insert Into test1 Values(3, 11,0);

不应该这样:

在此处输入图像描述

应该是这样的:

在此处输入图像描述

我不工作的代码:


    update a set a.ColumnB=a.ColumnB+1
from test1 a 
inner join test1 b
on b.ColumnA=a.ColumnA
and a.ColumnC=0;
select * from test1;

我怎样才能做到这一点?如何将我的第一个表更新为第二个表。

4

2 回答 2

3

请试试:

with T as(
select 
    row_number() over (partition by ColumnA order by ColumnA) Rnum, 
    min(ColumnB) over (partition by ColumnA) MinVal, 
    * 
From test1
) update T set ColumnB=MinVal+(Rnum-1)
于 2013-03-20T09:30:32.747 回答
1

试试这个:

WITH CTE
AS
(
  SELECT *,
    ROW_NUMBER() OVER(PARTITION BY ColumnA
                      ORDER BY ColumnB) AS RN
  FROM test1
)
UPDATE t 
SET t.ColumnB = CASE 
                  WHEN RN = 1 THEN ColumnB 
                  ELSE ColumnB + RN - 1 
                END  
FROM CTE AS t;

SQL 小提琴演示

于 2013-03-20T09:38:20.243 回答