2010-11-24 3 views
1

Если у меня есть таблица с элементами, начинающимися с C, D и J, то можно каким-либо образом организовать запрос, который упорядочивает их по возрастанию, но начинается с D и заканчивается C завернутый?Обтекание в SQL-запросе на результат

E.g. raw table = C, C, C, D, D, J Желаемый результат результата = D, D, J, C, C, C

В обычном SQL это не какой-либо функциональный язык? Я не вижу, как желаемый порядок может быть достигнут без жесткого кодирования, т. Е. Для выбора каждой отдельной записи в желаемом порядке все union'd вместе.

ответ

1

Это не похоже на регулярный заказ, поэтому вы не сможете сделать это простым способом. Но вы можете это сделать:

(SELECT * FROM yourtable WHERE ID >=C ORDER BY ID) UNION (SELECT SELECT * FROM yourtable WHERE ID <C ORDER BY ID) 
+0

Очень близко к тому, что я в конечном итоге делает для T-SQL, за исключением того, я должен был использовать производные таблицы с верхнее предложение, которое должно быть разрешено «ORDER BY» в частях соединения. К счастью, T-SQL позволяет использовать динамический TOP, поэтому я могу использовать «select top» (выберите «COUNT» (*) от Person) * от Person «blah blah». Точный ответ будет позже. – ProfK 2010-11-24 17:49:49

3

Вы можете ввести собственный ключ сортировки с оператором CASE.

Select Col1, Col2, Col3, 
     case left(Col3,1) when 'D' then 1 
         when 'J' then 2 
         when 'C' then 3 
         else 4 
     end as SortKey 
    from YourTable 
    order by SortKey, Col3 
1

Вы можете осуществить заказ сортировки заказов без жесткого кодирования с помощью таблицы:

CREATE TABLE SortRules (
    Prefix char(1) NOT NULL 
    ,SortOrder int NOT NULL 
) 

Затем присоединиться к SortRules таблице:

SELECT * 
FROM YourTable 
LEFT JOIN SortRules 
    ON YourTable.YourColumn LIKE SortRules.Prefix + '%' 
ORDER BY SortRules.SortOrder, YourTable.YourColumn 

Вы можете сделать SortOrder UNIQUE (хотя это не обязательный). Вы также можете решить, если вы хотите, отсутствующие файлы (непарные в объединении), чтобы быть в верхней или нижней части:

SELECT * 
FROM YourTable 
LEFT JOIN SortRules 
    ON YourTable.YourColumn LIKE SortRules.Prefix + '%' 
ORDER BY COALESCE(SortRules.SortOrder, 2147483647), YourTable.YourColumn 

SELECT * 
FROM YourTable 
LEFT JOIN SortRules 
    ON YourTable.YourColumn LIKE SortRules.Prefix + '%' 
ORDER BY COALESCE(SortRules.SortOrder, -2147483648), YourTable.YourColumn 
Смежные вопросы