<cffunction name="QueryWithOthers" access="public" returntype="query" output="no">
	<cfargument name="query" type="query" required="true">
	<cfargument name="labelfield" type="string" required="true">
	<cfargument name="valuefield" type="string" required="true">
	<cfargument name="maxrows" type="numeric" default="10">
	<cfargument name="minpercent" type="numeric" default="4">
	
	<cfset var minval = 0>
	<cfset var qMainRecords = 0>
	<cfset var qOthersRecords = 0>
	<cfset var qResults = Duplicate(arguments.query)>
	
	<cfif NOT ( ListFindNoCase(arguments.query.ColumnList,arguments.labelfield) AND ListFindNoCase(arguments.query.ColumnList,arguments.valuefield) )>
		<cfthrow message="Both the labelfield (#arguments.labelfield#) and the valuefield (#arguments.valuefield#) must be in the query provided. Columns in query are: #arguments.query.ColumnList#">
	</cfif>
	
	<cfif arguments.maxrows EQ 0>
		<cfset arguments.maxrows = arguments.query.RecordCount>
	</cfif>
	<cfset minval = ArraySum(arguments.query[arguments.valuefield]) * ( arguments.minpercent /100 )>
	
	<cfquery name="qMainRecords" dbtype="query" maxrows="#arguments.maxrows#">
	SELECT	*
	FROM	arguments.query
	WHERE	1 = 1
	<cfif minpercent>
		AND	#arguments.valuefield# > #minval#
	</cfif>
	ORDER BY 	#arguments.valuefield# DESC
	</cfquery>
	
	<cfquery name="qOthersRecords" dbtype="query">
	SELECT	*
	FROM	arguments.query
	WHERE	#arguments.labelfield# NOT IN (<cfqueryparam cfsqltype="cf_sql_varchar" value="#ArrayToList(qMainRecords[arguments.labelfield])#" list="true">)
	</cfquery>
	
	<cfset QueryAddRow(qMainRecords)>
	<cfset QuerySetCell(qMainRecords, arguments.labelfield, "Other")>
	<cfset QuerySetCell(qMainRecords, arguments.valuefield, ArraySum(qOthersRecords[arguments.valuefield]))>
	
	<cfreturn qMainRecords>
</cffunction>