A way to work around this is to select the column forcing it to lower or upper and then order by on that column. This example is working for me in CF9 and CF11. Pardon the quick and crude code but just whipped it up to show the ordering working:
<cfscript>
qry = QueryNew("TESTING");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "A");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "B");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "C");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "a");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "b");
QueryAddRow(qry); QuerySetCell(qry, "TESTING", "c");
</cfscript>
<cfquery name="qry2" dbtype="query">
SELECT TESTING, LOWER(TESTING) AS TMP FROM qry ORDER BY TMP</cfquery>
<cfoutput query="qry2">
#TESTING#<br />
</cfoutput>
That gives me the following output:
A
a
B
b
C
c
If you instead were to do an order by without doing lower or upper you end up with output similar to the problem you desribe:
<cfquery name="qry3" dbtype="query">
SELECT TESTING, LOWER(TESTING) AS TMP FROM qry ORDER BY TESTING</cfquery>
<cfoutput query="qry3">
#TESTING#<br />
</cfoutput>
Output in browser:
A
B
C
a
b
c