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 脚本,将 Version 列添加到表中。

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

于 2012-06-15T11:19:26.230 回答