Sql 将连续数字设置为特定行
我有这样的桌子:Sql 将连续数字设置为特定行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这样的桌子: +-----------+--------------------------------------+--------------+ | DesignKey | DesignTypeGuid | DesignNumber | +-----------+--------------------------------------+--------------+ | 2312 | 4FB560B0-E867-46B2-B116
+-----------+--------------------------------------+--------------+
| DesignKey | DesignTypeGuid | DesignNumber |
+-----------+--------------------------------------+--------------+
| 2312 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 3 |
| 2313 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 7 |
| 2314 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 8 |
+-----------+--------------------------------------+--------------+
因此,我通过如下查询获得DesignNumber
值:
DECLARE @CurrentChangeOrderDesignNumber INT =
(SELECT [DesignKey], [DesignNumber]
FROM [Design]
WHERE ParentDesignKey = @DesignKey
AND DesignTypeGuid = @COTypeGuid ORDER BY DesignKey);
我想做的是获取这些数据,并从1开始设置新的DesignNumber
值,因此我期望的结果应该是:
+-----------+--------------------------------------+--------------+
| DesignKey | DesignTypeGuid | DesignNumber |
+-----------+--------------------------------------+--------------+
| 2312 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 1 |
| 2313 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 2 |
| 2314 | 4FB560B0-E867-46B2-B116-338AD48C97AC | 3 |
+-----------+--------------------------------------+--------------+
我怎样才能做到这一点?关于在
选择
查询中,您将使用行号()
如果要更新值,可以使用可更新的CTE:
WITH toupdate as (
SELECT d.*,
ROW_NUMBER() OVER (PARTITION BY ParentDesignKey, DesignTypeGuid ORDER BY DesignNumber) as new_DesignNumber
FROM Design d
WHERE ParentDesignKey = @DesignKey AND
DesignTypeGuid = @COTypeGuid
)
UPDATE toupdate
SET DesignNumber = new_DesignNumber;
令人惊叹的。。。快速提问。如果我有一个号码。。。关于数字5,我想从这个数字继续,以便将6,7,8设置为设计编号。是否可以用CTE设置一个起始编号,而不是从一开始?您将在行编号()的结果中添加“5”。您的意思是行编号(5)
?因为它向我抛出了一个行数
取0的错误arguments@Jonathan . . . <代码>(5+行号()覆盖(按ParentDesignKey划分,按DesignNumber排序的DesignTypeGuid))作为新的\u DesignNumber
WITH toupdate as (
SELECT d.*,
ROW_NUMBER() OVER (PARTITION BY ParentDesignKey, DesignTypeGuid ORDER BY DesignNumber) as new_DesignNumber
FROM Design d
WHERE ParentDesignKey = @DesignKey AND
DesignTypeGuid = @COTypeGuid
)
UPDATE toupdate
SET DesignNumber = new_DesignNumber;