CREATE PROCEDURE [dbo].[SetBucketProcesses] ( @DebugMode BIT = 0 ) AS BEGIN DELETE FROM [dbo].[BucketToProcessMap] ;WITH maxBuckets AS ( SELECT MAX([BucketId]) AS 'MaxBucket' FROM [dbo].[Buckets] ) INSERT INTO [dbo].[BucketToProcessMap] SELECT CASE WHEN (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] = 0 THEN maxBuckets.[MaxBucket] ELSE (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] END AS 'NewBucketId', p.[ProcessId] FROM [dbo].[BucketProcesses] p CROSS JOIN maxBuckets IF @DebugMode = 1 BEGIN ;WITH maxBuckets AS ( SELECT MAX([BucketId]) AS 'MaxBucket' FROM [dbo].[Buckets] ) SELECT CASE WHEN (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] = 0 THEN maxBuckets.[MaxBucket] ELSE (ROW_NUMBER() OVER (ORDER BY p.[Duration] DESC) * 1) % maxBuckets.[MaxBucket] END AS 'NewBucketId', p.* FROM [dbo].[BucketProcesses] p CROSS JOIN maxBuckets END END