I've seen this question pop up a couple of times and just happen to have a pretty good example of this. This is good for single cell output, not to display a full row like you'd get doing a simple <cfoutput query = "foo">
It's pretty easy to get your table to do this: a b c d e f g h i j k l m
this FAQ will show you how to display your results like this: a d g j m b e h k c f i l
most of this faq is comments. There isn't really that much code involved. I will try to display that here.
<html> <head> <title>Vertical Sorting</title> </head> <cfquery name = "qMyQuery" datasource = "dsn"> SELECT fields FROM table ORDER BY myField </cfquery> <body> <!--- set the number of colums you wish to have ---> <cfset cols = 5> <!--- get the number of rows so you know what record to display at the top of the next row. for example if our query contains "a,b,c,d,e,f,g,h,i,j,k,l,m" (13 elements) it will produce 3 totalrows---> <cfset totalRows = ceiling(qMyQuery.RecordCount / cols)> <!--- set inital record to 1 "output" is the actual cell of the query ---> <cfset output = 1> <!--- Create table ---> <table width = "100%" border="0" align="center" cellpadding="2" cellspacing = "2"> <!--- loop through the rows. This loop will run 3 times in this example ---> <cfloop from = "1" to = "#totalRows#" index = "thisRow"> <tr> <!--- this loop will run 5 times in times in this example ---> <cfloop from = "1" to = "#cols#" index = "thisCol"> <!--- the width in the table cell will dynamicaly calculated to evenly distribute the cells. in this example if cols = 5 100/5 will make the cells 20% of the table ---> <td width = "<cfoutput>#numberformat(evaluate(100/cols), 99)#</cfoutput>%" align="center" nowrap style = "border: 1px solid #ccc;"> <!--- Check current record with the record count, this will be used to display data or an empty cell ---> <cfif output lte qMyQuery.recordCount> <cfoutput>#qMyQuery.myField[output]#</cfoutput> <cfelse> <!--- use <br> to display an empty cell ---> <br> </cfif> <!--- increment counter to the next record in this example if we started on the first cell of the first row it would be 1(a), then 4(d), then 7(g) and so on if this was the firs cell on the second row it would be 2(b), 5(e), 8(h), continue... ---> <cfset output = output + totalRows> </td> </cfloop> <!--- this little bit tells where to start the next row. if we just finished the first row output would be 2(b) ---> <cfset output = thisRow + 1> </tr> </cfloop> </table> </body> </html>