Cool problem. Here's my solution, this is on MS-SQL 2008, just run the whole thing.
-- create the test table CREATE TABLE X1 ( Id INT IDENTITY(1,1) PRIMARY KEY, Data VARCHAR(10) ) GO INSERT INTO X1 (DATA) SELECT TOP 3 'spam' FROM SYS.OBJECTS INSERT INTO X1 (DATA) SELECT TOP 10 'lamb' FROM SYS.OBJECTS INSERT INTO X1 (DATA) SELECT TOP 1 'rank' FROM SYS.OBJECTS SELECT * FROM X1 -- display the test data -- here's the start of the script, you can put in a stored proc or function SET NOCOUNT ON DECLARE @DATA TABLE(DATA VARCHAR(10)) DECLARE @D VARCHAR(10), @C INT, @SQL VARCHAR(255) -- put keywords in a table INSERT INTO @DATA SELECT 'spam' UNION SELECT 'ham' UNION SELECT 'lamb' UNION SELECT 'rank' SELECT Data, CASE WHEN COUNT(1) < 2 THEN COUNT(1) ELSE 2 END Count INTO #LimitedData FROM X1 WHERE Data IN (SELECT Data FROM @DATA) GROUP BY Data /* by now, #LimitedData could be enough as it already gives you a count of the data that matches the keywords, and you can use CF instead of a cursor to build out the SELECT (use a SELECT UNION), like so (not tested): <cfquery name="q">select data, count from #limitedData</cfquery> <cfoutput query="q"> sql &= "#q.currenrow : "UNION" ? ""# SELECT TOP #q.count# * FROM X1 WHERE Data = '#data#'" </cfoutput> but, here's the cursor code anyway (i don't like cursors, so i hope there's a way to do this without a cursor, all in SQL) */ CREATE TABLE #Results (Id int, Data varchar(10)) DECLARE C CURSOR FOR SELECT Data, Count FROM #LimitedData DELETE FROM @DATA OPEN C FETCH NEXT FROM C INTO @d, @c WHILE @@FETCH_STATUS = 0 BEGIN EXECUTE sp_executesql N'INSERT INTO #Results (id, data) SELECT TOP (@c) Id, Data FROM X1 WHERE data = @d', N'@c INT, @d VARCHAR(10)', @c = @c, @d = @d; FETCH NEXT FROM C INTO @d, @c END CLOSE C DEALLOCATE C SELECT * FROM #Results -- display results DROP TABLE #LimitedData DROP TABLE #Results ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/sql/message.cfm/messageid:3388 Subscription: http://www.houseoffusion.com/groups/sql/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/sql/unsubscribe.cfm