1

次のような私のテーブルとデータ、

declare @t1 table (myID varchar(200), chequeNo varchar(20));
insert into @t1 values('2011-01-03809','1925');
insert into @t1 values('2011-01-03810','1989');
insert into @t1 values('2011-01-03791','BIMB 256247');
insert into @t1 values('2011-01-03789','BIMB 256247');
insert into @t1 values('2011-01-03792','BIMB 256247');
insert into @t1 values('2011-01-03793','BIMB 256247');
insert into @t1 values('2011-13-00430','mbb 385030');
insert into @t1 values('2011-13-00431','mbb 385030');
insert into @t1 values('2011-01-03645','bmmb 003095');
insert into @t1 values('2011-08-00608','CIMB 376443');
insert into @t1 values('2011-08-00609','CIMB 385371');
insert into @t1 values('2011-04-00652','CIMB 512393');
insert into @t1 values('2011-13-00399','EBB 000639');
/* myID is a unique */

update文を使ってchequeNoを判別したい。

私の期待される結果は次のとおりです。

myID          | chequeNo
-----------------------------------
2011-01-03645   bmmb 003095
2011-01-03789   BIMB 256247 (1)
2011-01-03791   BIMB 256247 (2)
2011-01-03792   BIMB 256247 (3)
2011-01-03793   BIMB 256247 (4)
2011-01-03809   1925
2011-01-03810   1989
2011-04-00652   CIMB 512393
2011-08-00608   CIMB 376443
2011-08-00609   CIMB 385371
2011-13-00399   EBB 000639
2011-13-00430   mbb 385030 (1)
2011-13-00431   mbb 385030 (2)

@t1 テーブルに基づくと、myID は異なりますが、一部の checkeNo は同じです。myID と checkNo の関係は 1 対多のように見えます。1対1にしたいです(1つのmyIDに1つのチェック番号があります)。したがって、更新ステートメントを使用する必要があります。

私の更新ステートメントはどのように見えますか?

4

2 に答える 2

2

行は、ランク付け機能を使用して番号を付け直すことができます。

UPDATE subquery
SET chequeNo = chequeNo + ' (' + CAST(sequence AS varchar(20)) + ')'
FROM
(
    SELECT *
    , sequence = ROW_NUMBER() OVER (PARTITION BY chequeNo ORDER BY myID)
    , reverseSequence = ROW_NUMBER() OVER (PARTITION BY chequeNo ORDER BY myID DESC)
    FROM @t1
) subquery
WHERE NOT (sequence = 1 AND reverseSequence = 1)
于 2012-04-08T08:37:55.763 に答える
0
select myid, chequeno +
' (' +
cast(ROW_NUMBER() OVER (partition by chequeno order by chequeno) as varchar) +' )' as chequeno
from @t1
于 2012-04-08T08:49:46.863 に答える