0

test1テーブルのいくつかの行を更新したいと思います。ColumnB10 11,12,13,14 でなければなりません ....しかし、私のテーブル

例えば:

ColumnA は親ノードです。ColumnA+ColumnB は主キーです。たとえば、ColumnA は CustomerNumber です。ColumnB はお客様の注文番号です。

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;

どうやってやるの?最初のテーブルを 2 番目のテーブルに更新する方法。

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 に答える