我需要创建一个名为" PROCESS"的表,它的主键由两列(IdOffice,IdProcess)组成,问题是我需要" IdProcess"包含IDENTITY属性并逐个增加,但取决于字段" IdOffice"的值。如下:
" IdProcess"必须逐一增加,如果" IdOffice"是相同的,所以我更清楚地画了一张照片:
我是怎么做到的?
感谢您的帮助。
答案 0 :(得分:4)
您无法使用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;
答案 1 :(得分:0)
我还建议您拥有此表的主键作为标识。然后将IdOffice和IdProcess视为行中的数据。如果你这样做,那么Aaron建议在查询时计算IdProcess更有意义。