Viết một thủ tục lưu trữ trong MS SQL Server 2008 R2, tôi muốn tránh sử dụng DSQL ...Conditional SQL ORDER BY ASC/DESC cho cột alpha
Tôi muốn các cách sắp xếp (ASC hoặc DESC) là có điều kiện.
Bây giờ, với một cột số tôi chỉ đơn giản sẽ sử dụng một tuyên bố vụ án và phủ nhận giá trị bắt chước ASC hoặc DESC ... Đó là:
... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC
một phương pháp thích hợp để làm điều này với một là gì cột alpha? EDIT: Tôi nghĩ một cách thông minh nhưng nó có vẻ không hiệu quả khủng khiếp ... Tôi có thể chèn cột alpha đã ra lệnh của tôi vào một bảng tạm thời với một autonumber sau đó sắp xếp theo autonumber bằng cách sử dụng phương pháp mô tả ở trên.
EDIT2:
Các bạn nghĩ gì về phương pháp này?
ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC
Tôi không biết nếu buộc một sắp xếp trên một cột thống nhất là hiệu quả hơn bắt nguồn từ số chuỗi được sắp xếp dù
thông minh, khá giống với giải pháp của tôi, tôi đăng trong chỉnh sửa. Tôi hy vọng điều gì đó hiệu quả hơn là lấy một bản sao được sắp xếp khác của dữ liệu chỉ để tạo ra thứ tự sắp xếp số .... – Matthew
@Matthew PK: bạn phải thay thế chuỗi cho một số phù hợp hoặc thêm các loại giả cho không các trường hợp liên quan. Không có gì * thực sự * thông minh Tôi sợ – gbn
Bạn nghĩ gì về cách tiếp cận "hai mệnh đề ORDER BY" trong bản chỉnh sửa thứ hai của tôi? – Matthew