2012-04-18 34 views
8

Tôi có một bảng chứa ngày và giờ, cột ngày, có thể có bất kỳ trong bảy ngày được nhập vào nó và chúng được đặt thành kiểu dữ liệu varchar. Vì bảng này giữ thời gian đặt phòng cho một khách hàng, tôi muốn chọn tất cả các ngày từ bảng nơi id phù hợp, và tôi muốn sắp xếp theo ngày thứ Hai-Chủ Nhật. Tôi đã hy vọng rằng tôi có thể thêm một cái gì đó để truy vấn này để tự chọn thứ tự các kết quả trở lại như vậy:Có thể chọn một ORDER BY cụ thể trong SQL Server 2008 không?

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

Điều này tất nhiên không làm việc nhưng tôi chỉ muốn hiển thị những gì tôi đang cố gắng để đạt được. Khách hàng không nhất thiết phải yêu cầu trợ giúp mỗi ngày, tôi chỉ muốn hiển thị những ngày mà họ được đăng ký.

Sắp xếp theo DESC và ASC không giúp ích cho các ngày trong tuần, tôi sẽ đánh giá cao mọi mẹo về cách đạt được điều này.

Cảm ơn.

+1

Việc sử dụng chức năng DATEPART (weekday, @ dtDate) có giúp được không? Nó sẽ cung cấp cho bạn những ngày trong tuần như số –

Trả lời

26

Hmm .. thật khó chịu, ngày được lưu trữ là nguyên văn 'Thứ hai', 'Thứ ba', v.v ...?

Dù sao, chỉ cần làm điều này:

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

Xin chào giải pháp của bạn đã làm việc, cảm ơn bạn rất nhiều! Đó là một điều khác đã học được! Tôi không còn phiếu nào trong ngày hôm nay, nhưng khi chúng được làm mới, tôi sẽ bỏ phiếu cho câu trả lời của bạn. Tôi có thể hỏi ý của bạn về cách làm những điều khó chịu, tôi cảm thấy nó không phải là cách tốt nhất để làm điều này. Niềm vui khi trở thành người mới bắt đầu! – deucalion0

+1

Hoặc sử dụng DATETIME hoặc sử dụng số nguyên cho các ngày trong tuần, ví dụ: 0 = Thứ Bảy, 1 = Thứ Hai, 2 = Thứ Ba, vv Bằng cách đó, bạn có thể tự nhiên sắp xếp trường, hoặc bằng: 'ORDER BY DATEPART (WEEKDAY, DateTimeFieldHere)', hoặc điều này: 'ORDER BY DateTimeFieldHere' –

+1

Nếu re- thiết kế bảng không phải là một lựa chọn cho bạn vào thời điểm này, chỉ cần thêm một cột được tính toán cho những trường hợp 'TRƯỜNG HỢP'. Bằng cách đó, bạn có thể sắp xếp trên trường có thể lập chỉ mục. Cột được tính toán có thể tăng tốc độ sắp xếp hoặc lọc. ví dụ. http://www.mssqltips.com/sqlservertip/1682/using-computed-columns-in-sql-server-with-persisted-values/ http://blog.sqlauthority.com/2010/08/13/sql- Máy chủ-tính-cột-và-hiệu suất-phần-3/ –

1

IMHO bạn không có lý do nào để lưu trữ Monday, Tuesday, etc ... Nếu bạn lưu trữ ngày hoặc giá trị datetime, bạn luôn có thể trích xuất các tên các ngày trong tuần từ dữ liệu mà tại thời điểm truy vấn khi bạn cần - bằng cách sử dụng DATENAME trong truy vấn của bạn hoặc sử dụng chức năng trong cấp bản trình bày của bạn. Chi phí hoạt động của việc làm như vậy không biện minh cho việc lưu trữ IMHO một cách riêng biệt. Và bạn vẫn có thể sắp xếp chính xác bằng cách sử dụng dữ liệu ngày/datetime gốc.

Các vấn đề liên quan