Как я могу отсортировать результаты SQL, но сохранить некоторые результаты как особые? - PullRequest
4 голосов
/ 19 декабря 2008

У меня есть результат запроса SQL, который я хотел бы отсортировать в алфавитном порядке, но есть пара часто используемых результатов, которые я хотел бы вспомнить. Есть ли простой способ, которым я могу достичь этого, делая умный SQL или сортируя данные (asp.net) после того, как я их заполнил?

Я знаю идентификатор базы данных вещей, которые я хочу держать наверху заранее, если это имеет значение.

Ответы [ 5 ]

10 голосов
/ 19 декабря 2008

Самый простой способ сделать это - отсортировать что-то, что отличает эти поля от других ...

В предположении, что у вас есть доступ к изменению структуры таблицы (чего у вас нет), затем добавьте «липкое» поле, которое позволяет помечать элементы как липкие и при желании прикреплять ордера к липким предметам. Сортировать по этому полю перед обычной сортировкой.

Что касается уловки, которая делает это без определения этого поля - вам нужно будет отсортировать некоторые данные, которые вы можете найти в этих полях, или сохранить идентификаторы в отдельной таблице - или список в вашем запросе ... не самый идеальный способ, но он будет работать.

6 голосов
/ 19 декабря 2008

Вы можете определить пользовательский столбец, который устанавливает «специальный флаг», по которому вы можете сортировать. Затем сортируйте по алфавиту.

SELECT ...
    IsSpecial = CASE WHEN RowID IN (100,534,203) THEN 1 ELSE 0 END
FROM ...
ORDER BY IsSpecial DESC, RowID ASC, Name ASC
5 голосов
/ 19 декабря 2008

Просто упорядочите по регистру, который использует любые указанные вами правила ...

  ...
   Order By Case 
      When [My Rules that designate special] 
       Then 0 Else 1 End
4 голосов
/ 19 декабря 2008

Вы можете добавить дополнительное поле под названием «Специальный». Special не обязательно должен существовать в таблице, вы можете получить его запросом, как считаете нужным. Затем сортируйте следующим образом:

ORDER BY Special DESC, Name ASC

Это, конечно, предполагает, что ваши не специальные строки будут 0, а буквенное поле называется «Имя»

2 голосов
/ 19 декабря 2008

Для добавления в @EndangeredMassa:

Вы также можете сделать нечто подобное, если вы уже вступаете в союзы:

SELECT 0 QueryType, Desc, GrandTotal
FROM YourTable

UNION ALL

SELECT 1 QueryType, Desc, LineItems
FROM YourTable

ORDER BY QueryType, Desc

Примечание: профсоюзы в этом примере могут быть не идеальными ... это просто пример!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...