我需要创建一个名为“PROCESS”的表,它的主键由两列(IdOffice,IdProcess)组成,问题是我需要“IdProcess”包含IDENTITY属性并一一增加但取决于字段的值“IdOffice”如下:
如果“IdOffice”相同,则“IdProcess”必须逐个增加,所以我放一张图更清楚:
我该怎么做?
谢谢你的帮助。
我需要创建一个名为“PROCESS”的表,它的主键由两列(IdOffice,IdProcess)组成,问题是我需要“IdProcess”包含IDENTITY属性并一一增加但取决于字段的值“IdOffice”如下:
如果“IdOffice”相同,则“IdProcess”必须逐个增加,所以我放一张图更清楚:
我该怎么做?
谢谢你的帮助。
你不能用 IDENTITY 做到这一点。您需要有一个单独的列。问题是这可能很难维护。如果你有这样的数据:
IdOffice IdProcess
--------- ----------
1 1
1 2
1 3
2 1
2 2
删除第二行时会发生什么?是否需要为 IdOffice = 1 的所有值重新计算 IdProcess?
假设您有其他一些列要排序,您总是可以在查询时生成这个数字,而不是支付存储它的成本并在表更改时处理维护。
SELECT IdOffice, IdProcess = ROW_NUMBER() OVER
(PARTITION BY IdOffice ORDER BY DateCreated)
FROM dbo.YourTable
ORDER BY IdOffice, IdProcess;
我还建议您为此表设置一个作为身份的主键。然后将 IdOffice 和 IdProcess 视为行中的数据。如果您这样做,那么 Aaron 在查询时计算 IdProcess 的建议就更有意义了。