2012-04-18 6 views
8

Mam tabelę zawierającą dni i godziny, kolumna dni, może mieć dowolny z siedmiu wprowadzonych dni i są one ustawione na typ danych varchar. Ponieważ ta tabela zawiera czasy rezerwacji dla klienta, chcę wybrać wszystkie dni z tabeli, w których id się zgadza, a ja chcę sortować według dnia od poniedziałku do niedzieli. Miałem nadzieję, że mogę coś dodać do tego zapytania, aby ręcznie wybrać kolejność wyniki wrócić tak:Czy można wybrać konkretne ZAMÓWIENIE w SQL Server 2008?

select * 
from requirements 
where Family_ID = 1 
ORDER BY Day, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday 

To oczywiście nie działa, ale po prostu chciał pokazać, co próbuję osiągnąć. Klient niekoniecznie potrzebuje pomocy każdego dnia, chcę tylko pokazać dni, w których są zarezerwowane.

Sortowanie przez DESC i ASC nie pomaga w dni tygodnia, byłbym wdzięczny za wszelkie wskazówki, jak osiągnąć to.

Dzięki.

+1

Czy pomocna byłaby funkcja DATEPART (weekday, @ dtDate)? Daje ci dni tygodnia jako numery –

Odpowiedz

26

Hmm .. To paskudne, dni są przechowywane jako dosłowne "Poniedziałek", "Wtorek" itp.?

W każdym razie, po prostu to zrobić:

SELECT * 
FROM Requirements 
ORDER BY 
    CASE Day 
    WHEN 'Monday' THEN 1 
    WHEN 'Tuesday' THEN 2 
    WHEN 'Wednesday' THEN 3 
    WHEN 'Thursday' THEN 4 
    WHEN 'Friday' THEN 5 
    WHEN 'Saturday' THEN 6 
    WHEN 'Sunday' THEN 7 
    END 
+0

Cześć, twoje rozwiązanie działało, dziękuję bardzo! To jest kolejna rzecz, której się nauczyłem! Nie mam dziś żadnych głosów, ale kiedy zostaną odświeżone, zagłosuję za twoją odpowiedzią. Czy mogę tylko zapytać, co masz na myśli mówiąc o moim sposobie bycia nieprzyjemnym, uznałem, że nie jest to najlepszy sposób, aby to zrobić. Radości bycia początkującym! – deucalion0

+1

Użyj DATETIME lub użyj liczby całkowitej dla dni tygodnia, np. 0 = sobota, 1 = poniedziałek, 2 = wtorek, itd. W ten sposób możesz oczywiście sortować pole, według: 'ORDER BY DATEPART (WEEKDAY, DateTimeFieldHere)' lub tego: 'ORDER BY DateTimeFieldHere' –

+1

Jeśli Projektowanie stołu nie jest dla ciebie opcją w tym momencie, po prostu dodaj kolumnę obliczeniową dla tych "GATUNEK KIEDY". W ten sposób możesz sortować pola indeksowane. Obliczona kolumna może przyspieszyć sortowanie lub filtrowanie. na przykład http://www.mssqltips.com/sqlservertip/1682/using-computed-columns-in-sql-server-withperspers-values/ http://blog.sqlauthority.com/2010/08/13/sql- server-computed-column-and-performance-part-3/ –

1

IMHO nie ma żadnego powodu, aby przechowywać Monday, Tuesday, etc ... Jeśli przechowywać datę lub wartości datetime, zawsze można wyodrębnić nazwa dnia tygodnia z tymi danymi w czasie zapytania, gdy jest to potrzebne - w zapytaniu lub przy użyciu funkcji warstwy prezentacji. Koszt wykonania tego nie uzasadnia przechowywania osobnego IMHO. Powinieneś nadal być w stanie poprawnie sortować używając natywnych danych daty/datetime.