Or even more elaborate?-- Prepare sample dataCREATE TABLE tblSample ( RowID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, CustomerID INT, Value INT ) INSERT tblSample ( CustomerID, Value )SELECT 1, 899 UNION ALLSELECT 1, 100 UNION ALLSELECT 1, 95 UNION ALLSELECT 1, 50 UNION ALLSELECT 1, 55 UNION ALLSELECT 1, 40 UNION ALLSELECT 1, 5 UNION ALLSELECT 1, 100 UNION ALLSELECT 1, 100 UNION ALLSELECT 1, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 50 UNION ALLSELECT 2, 250 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 100 UNION ALLSELECT 2, 90 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 50 UNION ALLSELECT 3, 350 UNION ALLSELECT 3, 450 UNION ALLSELECT 3, 450 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 100 UNION ALLSELECT 3, 50 UNION ALLSELECT 3, 50 UNION ALLSELECT 3, 50 UNION ALLSELECT 3, 1 UNION ALLSELECT 3, 10 UNION ALLSELECT 3, 1GO-- Create a view to bypass limitation in functionCREATE VIEW dbo.vwSampleAS SELECT RowID, CustomerID, Value, ROW_NUMBER() OVER (ORDER BY NEWID()) AS totID, ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY NEWID()) AS cusID FROM tblSampleGO-- Create a function to get my dataCREATE FUNCTION dbo.fnGetMySum( @CustomerID INT, @FromValue INT, @ToValue INT)RETURNS @Data TABLE ( RowID INT, CustomerID INT, Value INT )ASBEGIN WHILE @@ROWCOUNT > 0 AND NOT (SELECT COALESCE(SUM(Value), 0) FROM @Data) BETWEEN @FromValue AND @ToValue INSERT @Data ( RowID, CustomerID, Value ) SELECT TOP 1 RowID, CustomerID, Value FROM ( SELECT RowID, CustomerID, Value FROM vwSample WHERE (totID = 1 AND @CustomerID IS NULL) OR (cusID = 1 AND CustomerID = @CustomerID) ) AS s WHERE NOT EXISTS (SELECT * FROM @Data AS d WHERE d.RowID = s.RowID) RETURNENDGO-- Use function either directly ot with CROSS APPLY, for all customersSELECT *FROM dbo.fnGetMySum(NULL, 1000, 2000)GO-- Use function either directly ot with CROSS APPLY, for customer #2SELECT *FROM dbo.fnGetMySum(2, 1000, 2000)GODROP VIEW dbo.vwSampleGODROP FUNCTION dbo.fnGetMySumGODROP TABLE tblSampleGO
E 12°55'05.63"N 56°04'39.26"