only this method came to my mind right now . . .-- Sample tableDECLARE @sample TABLE( RN int identity, CUSTOMER varchar(3), MEMBER int)-- Sample DataINSERT INTO @sample (CUSTOMER, MEMBER)SELECT 'A', 123 UNION ALLSELECT 'B', 124 UNION ALLSELECT 'C', 234 UNION ALLSELECT 'C', 235 UNION ALLSELECT 'C', 124 UNION ALLSELECT 'D', 234 UNION ALLSELECT 'D', 234 UNION ALLSELECT 'E', 235 UNION ALLSELECT 'F', 124 UNION ALLSELECT 'F', 234 UNION ALLSELECT 'G', 235 UNION ALLSELECT 'G', 124 UNION ALLSELECT 'G', 234 UNION ALLSELECT 'H', 235-- QueryDECLARE @pagesize intSELECT @pagesize = 4; WITHcteAS( SELECT RN, CUSTOMER, MEMBER, CUSTCNT = row_number() OVER (PARTITION BY CUSTOMER ORDER BY RN DESC) FROM @sample),rcteAS( SELECT RN, CUSTOMER, MEMBER, CUSTCNT, LINES = 1, PAGE = 1 FROM cte WHERE RN = 1 UNION ALL SELECT c.RN, c.CUSTOMER, c.MEMBER, c.CUSTCNT, LINES = CASE WHEN r.LINES + c.CUSTCNT <= @pagesize THEN r.LINES + 1 ELSE 1 END, PAGE = CASE WHEN r.LINES + c.CUSTCNT <= @pagesize THEN r.PAGE ELSE r.PAGE + 1 END FROM cte c INNER JOIN rcte r ON c.RN = r.RN + 1)SELECT *FROM rcte/*RN CUSTOMER MEMBER CUSTCNT LINES PAGE ----------- -------- ----------- -------------------- ----------- ----------- 1 A 123 1 1 12 B 124 1 2 13 C 234 3 1 24 C 235 2 2 25 C 124 1 3 26 D 234 2 1 37 D 234 1 2 38 E 235 1 3 39 F 124 2 1 410 F 234 1 2 411 G 235 3 1 512 G 124 2 2 513 G 234 1 3 514 H 235 1 4 5(14 row(s) affected)*/
KH[spoiler]Time is always against us[/spoiler]