如何将版本号添加到一组数据

时间:2012-06-15 11:17:24

标签: sql-server sql-server-2008

我在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中有更好的方法,但我已经不知道怎么开始...... 任何帮助/指针都会被感激地接受

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

首先编写一个ALTER脚本,将Version列添加到表中。

接下来编写一个UPDATE脚本,根据您的条件设置版本。