У меня есть оператор выбора, который работает в Oracle. Это имитация того, как это выглядит (реальное утверждение - 200+ строк):
select * from (
select * from (
select id, name from my_table where name like 'D%' or name like 'Z%' order by name, id)
union all
select * from (
select id, name from my_table where name like 'K%' or name like 'T%' order by name, id)
union all
select * from (
select id, name from my_table where name like 'B%' or name like 'M%' order by name, id)
);
Итак, по сути, это объединение трех типов записей из одной таблицы. Внешний "select * from" добавляется автоматически и не может быть удален / изменен. Порядок важен - записи из первого подзапроса должны быть первыми, затем записи из второго и т. Д.
Мне нужно переписать его для сервера sql (желательно один общий оператор, который работает также в Oracle и SQL Server, но это необязательно)
То, что я пробовал, было:
select * from (
select * from (
select id, name, 1 as order_column from my_table where name like 'D%' or name like 'Z%') subquery
union all
select * from (
select id, name, 2 as order_column from my_table where name like 'K%' or name like 'T%') subquery
union all
select * from (
select id, name, 3 as order_column from my_table where name like 'B%' or name like 'M%') subquery
) outerquery order by order_column, name, id;
Порядок сохраняется, но столбец order_column включен в записи результатов, и это неправильно.
Итак, я изменил это на:
select * from (
select id, name from (
select id, name, 1 as order_column from my_table where name like 'D%' or name like 'Z%') subquery
union all
select id, name from (
select id, name, 2 as order_column from my_table where name like 'K%' or name like 'T%') subquery
union all
select id, name from (
select id, name, 3 as order_column from my_table where name like 'B%' or name like 'M%') subquery
) parentquery order by order_column, name, id
Но теперь, очевидно, столбец order_column не виден во внешнем запросе и не работает. Как я писал ранее, «select * from» в первой строке не может быть изменено - только внешнее предложение ORDER BY. Кроме того, примеры условий «имя типа« D% »» в действительности намного сложнее, и я не могу использовать их в каком-то внешнем порядке в случае ... случая, когда ... (они должны оставаться в подзапросах)
Буду благодарен за помощь.