あなたが求めているのは、その文字で始まる最初のバンドの文字のみを出力することです。これを実現する 1 つの方法は、クエリを少し変更することです (ここでは SQL-92 構文と思われるものを使用していますが、特定のデータベースの最初の文字を取得するためのより良い方法があることに注意してください)。
select
band_name,
SUBSTRING(band_name from 1 for 1) AS first_letter
from
bands
order by
band_name
これにより、クエリの最初の文字が取得されます。
数字の最初の文字を含むすべてのバンドをまとめてグループ化したい場合は、SQL の CASE ステートメントを使用してそれを行うことができます (DBMS で ascii() に相当するものを見つける必要がある場合があります)。また、ロジックを逆にして「通常の」文字と照合し、他のすべてを「0-9 と句読点」のカテゴリにまとめることもできます。多くの音楽システムがそうしていると思います (iPhone の iTunes だと思いますが、他にもあるはずです)。
select
band_name,
CASE
WHEN ascii(left(band_name, 1)) BETWEEN 48 AND 57 THEN '0-9'
ELSE left(band_name, 1)
END AS first_letter
from
bands
order by
band_name
これで、追加の列を cfoutput の group 属性と一緒に使用して、必要な出力を得ることができます。
<UL>
<cfoutput query="bandNameList" group="first_letter">
<LI> #first_letter#
<UL>
<cfoutput>
<LI> #band_name# </LI>
</cfoutput>
</UL>
</LI>
</cfoutput>
</UL>