У меня недавно была та же проблема - я хотел использовать «select into», хотел, чтобы все столбцы в целевой таблице были обнуляемыми и amp; повторяемый подход, при котором мне не нужно было знать имена полей в исходной таблице.
select *
into dbo.I_Data
from
(select 1[Z_1]) A
full join (select null[Z_2], * from dbo.S_Data) B on A.Z_1 = B.Z_2
где dbo.S_Data - таблица данных источника, а [Z_ 1] & amp; [Z _2] - два фиктивных столбца, используемые для объединения
Затем для очистки:
(a) Удалить строку нулей
delete dbo.I_Data where [Z_1] = 1
( б) Удалить фиктивные поля:
alter table dbo.I_Data
drop column [Z_1], [Z_2]
С уважением.
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
Функция FIELD возвращает положение первой строки в оставшемся списке строк.
Однако с точки зрения производительности гораздо лучше иметь индексированный столбец, представляющий ваш порядок сортировки, а затем сортировать по этому столбцу.
Другой вариант отсюда: http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html
select *
from tablename
order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;
Итак, в вашем случае (непроверенный) будет
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C';
В зависимости от того, что вы делаете. находил это немного странным, но всегда заставлял его работать, немного поиграв с ним.
Попробуйте что-нибудь вроде
... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ...
Вам нужен другой столбец (числовой) в вашей таблице, в котором вы указываете порядок сортировки. Предложение IN работает по-другому.
B - 1
A - 2
D - 3
E - 4
C - 5