我在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中有更好的方法,但我已经不知道怎么开始...... 任何帮助/指针都会被感激地接受
答案 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脚本,根据您的条件设置版本。