1

SQL Server テーブルにいくつかのデータがあります...

ClientID  DecisionID
60043     1466338   
60043     1475880   
60043     1480017   
104563    1468452
106454    1475922   
106454    1475922   

そして、各クライアントの決定ごとに「バージョン」列を追加するように求められたので、たとえば、クライアント 60043 にはバージョン 1、2、および 3 が含まれます...

ClientID  DecisionID  Version
60043     1466338       V1
60043     1475880       V2
60043     1480017       V3
104563    1468452       V1
106454    1475922       V1
106454    1475922       V2

ステートメントを使用して列を追加できますUPDATE。その後、C# コードを記述して、新しい列にデータを入力することを繰り返すことができますが、SQL にはもっと良い方法があると確信していますが、開始する方法さえわかりません.. .どんなヘルプ/ポインタもありがたく受け入れられます

4

2 に答える 2

3

結果にバージ​​ョンを追加するだけの場合 (実際に列を作成するのではなく)、次のようにします。

DECLARE @t TABLE
    (
      clientID INT ,
      decisionID INT
    );
INSERT  INTO @t
VALUES  ( 60043, 1466338 ),
        ( 60043, 1475880 ),
        ( 60043, 1480017 ),
        ( 104563, 1468452 ),
        ( 106454, 1475922 ),
        ( 106454, 1475922 )

SELECT  clientID ,
        decisionID ,
        'V'
        + CAST(ROW_NUMBER() OVER ( PARTITION BY clientID 
                                   ORDER BY decisionID DESC ) AS NVARCHAR(10))
FROM    @t  

同様の方法で更新できます。

DECLARE @t TABLE
    (
      clientID INT ,
      decisionID INT ,
      ver VARCHAR(20)
    );
INSERT  INTO @t
        ( clientID, decisionID )
VALUES  ( 60043, 1466338 ),
        ( 60043, 1475880 ),
        ( 60043, 1480017 ),
        ( 104563, 1468452 ),
        ( 106454, 1475922 ),
        ( 106454, 1475922 );

WITH    c AS ( SELECT   clientID ,
                        decisionID ,
                        'V'
                        + CAST(ROW_NUMBER() OVER ( PARTITION BY clientID 
                            ORDER BY decisionID DESC ) AS NVARCHAR(10)) v
               FROM     @t
             )
    UPDATE  tab
    SET     ver = v
    FROM    @t tab
            INNER JOIN c ON tab.clientID = c.clientID
                            AND tab.decisionID = c.decisionID

SELECT  *
FROM    @t;
于 2012-06-15T11:35:42.857 に答える
0

まず、バージョン列をテーブルに追加する ALTER スクリプトを記述します。

次に、条件に応じてバージョンを設定する UPDATE スクリプトを記述します。

于 2012-06-15T11:19:26.230 に答える