2013-10-11 6 views
2

Можно ли установить ORDER BY в инструкции sql для значений, которые вы хотите? Например, если я хочу, чтобы выбрать значения для дня в следующем порядке: Thu, Sat, Sun, MonSQL-установка ORDER BY

SELECT * 
FROM `NFL_Games` 
WHERE Week = '1' 
ORDER BY Day 

ответ

7

вы можете использовать пункт case when для личных порядков ...

order by 
(case Day 
when 'Thu' then 1 
when 'Sat' then 2 
when 'Sun' then 3 
when 'Mon' then 4 
else 5 end), 
Day 
+0

Или создайте UDF, как это –

+0

Это выглядит правильно, но это дало мне некоторую ошибку, связанную с синтаксисом. HERE - это запрос: SELECT * FROM 'NFL_Games' WHERE Week = '1' order by (case Day , когда« Thu »затем 1 , когда« Sat », затем 2 , когда« Солнце затем 3 , когда «Mon», затем 4 else 5 end), День –

+0

Эту ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с «Mon», а затем 4 else 5 end), «День» в строке 5 –

0

Да, вы можете использовать выражение в ORDER BY

SELECT * FROM `NFL_Games` WHERE Week = '1' ORDER BY DAYOFWEEK(date_field) 
+1

как бы построить запрос, как я показал выше, хотя заказать Thu, Sat, Sun, Mon? –

+1

Если вам нужны только «сменные» дни, используйте эту формулу: MOD (DAYOFWEEK (date_field) + 4), 6) – Nicolai

-2

Это кажется вполне законно; вы также можете сортировать по возрастанию или убыванию, в зависимости от ваших предпочтений.

0

Как Order by последнего пункт, который обрабатывается при выполнении запроса, да, если ваш оператор выбора имеет дневную колонку (либо рассчитывается на основе date из таблицы «NFL_Games» или в таблице есть столбец «День», вы можете указать порядок между рядами в своем окончательном наборе.

0

Что-то вроде этого будет работать .. может быть, немного раздражает из-за утверждения case, но сделает

SELECT *, 
     CASE fstrDay 
     WHEN 'Thursday' THEN 0 
     WHEN 'Friday' THEN 1 
     WHEN 'Saturday' THEN 2 
     WHEN 'Sunday' THEN 3 
     WHEN 'Monday' THEN 4 
     WHEN 'Tuesday' THEN 5 
     WHEN 'Wednesday' THEN 6 
     END AS flngOrder 
FROM NFL_Games 
WHERE Week = '1' 
ORDER BY flngOrder ASC 
Смежные вопросы