Сортировать дни недели в SQL - PullRequest
1 голос
/ 11 февраля 2012

У меня есть база данных Access, которую я запрашиваю с помощью SQL из VB .NET. В таблице, которую я запрашиваю, есть столбец «День», в котором дни хранятся в виде текстовых данных в Access. Мне нужно выбрать все уникальные экземпляры в поле, поэтому в настоящее время я использую:

SELECT Day FROM Slot GROUP BY Day

Но это возвращает дни в алфавитном порядке, когда они мне нужны в хронологическом порядке. Теперь, если предположить, что единственными возможными значениями, которые он может принять, являются «понедельник», «вторник», «среда», «четверг» и «пятница», что бы вы порекомендовали сделать для их правильной сортировки?

Редактировать: Таблица называется Слот и имеет три столбца; SlotNumber (AutoNumber), день (текст), SlotTime (текст). Примером может быть:

Номер слота: 6

День: Понедельник

SlotTime: 2:40 PM

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Если вы застряли с данными как есть, я бы порекомендовал вам добавить предложение ORDER BY.В предложении ORDER BY вы хотите отобразить каждое отдельное значение в числовое значение.

например, используя IIf

SELECT Slot.Day
FROM Slot
GROUP BY Slot.Day
ORDER BY IIf(Slot.Day = "Monday", 1,
         IIf(Slot.Day = "Tuesday", 2,
         IIf(Slot.Day = "Wednesday", 3,
         IIf(Slot.Day = "Thursday", 4,
         IIf(Slot.Day = "Friday", 5)))));

например, используя SWITCH

SELECT Slot.Day
FROM Slot
GROUP BY Slot.Day
ORDER BY SWITCH(Slot.Day = 'Monday', 1,
                Slot.Day = 'Tuesday', 2,
                Slot.Day = 'Wednesday', 3,
                Slot.Day = 'Thursday', 4,
                Slot.Day = 'Friday', 5);
1 голос
/ 11 февраля 2012

Вы не можете "сортировать" их так, как хотите. В любом случае, почему вы используете текстовые значения? Стандартный способ сделать это - использовать числовые значения для представления дней; 0 = воскресенье, 1 = понедельник, 2 = вторник и т. Д. Таким образом, у вас будет поле int со значениями 1-5. Тогда вы могли бы отсортировать его правильно.

...