UNION で結合する表内で OREDER BY が使えない話なのだが。
ああ・・・今、ふと思ったが、単に ORDER BY したものをサブクエリにすればいいだけだ・・・
SELECT * FROM (SELECT * FROM table1 WHERE d1='B' ORDER BY d2) T1
UNION
SELECT * FROM (SELECT * FROM table1 WHERE d1='A' ORDER BY d2) T2
UNION
SELECT * FROM (SELECT * FROM table1 WHERE d1='C' ORDER BY d2) T3
ま、もう、プログラム内であれこれしてしまったので良いのだが。
ちなみに、UNION で結合する SELECT 文のサブクエリにはちゃんと名前をつけないと 'Every derived table must have its own alias' のエラーが出てしまうのでご注意を。