<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>