, , :
DECLARE @o TABLE ( id INT )
INSERT INTO @o
VALUES ( 1 ),( 2 ),( 3 ),( 4 ),( 5 ),( 6 )
DECLARE @d TABLE ( d CHAR(1), p CHAR(2) )
INSERT INTO @d
VALUES ( 'A', 'P1' ),
( 'A', 'P2' ),
( 'B', 'P3' ),
( 'B', 'P4' ),
( 'B', 'P5' ),
( 'C', 'P6' ),
( 'C', 'P7' ),
( 'C', 'P8' ),
( 'C', 'P9' )
;WITH cte1 AS(SELECT *,
1 i1,
(id - 1) % 2 + 1 i2,
(id - 1) % 3 + 1 i3,
(id - 1) % 4 + 1 i4,
(id - 1) % 5 + 1 i5
FROM @o),
cte2 AS(SELECT *,
ROW_NUMBER() OVER(PARTITION BY d ORDER BY p) rn,
COUNT(*) OVER(PARTITION BY d) cn FROM @d)
SELECT c2.d, c2.p, c1.id
FROM cte1 c1
JOIN cte2 c2 ON c2.rn = CASE c2.cn WHEN 1 THEN c1.i1
WHEN 2 THEN c1.i2
WHEN 3 THEN c1.i3
WHEN 4 THEN c1.i4
WHEN 5 THEN c1.i5
WHEN 6 THEN c1.id
END
ORDER BY c2.d, c1.id