2013-04-17 43 views
7

Tôi khá mới đối với SQL Server. Bây giờ tôi đã bắt gặp một truy vấn như sau:TSQL: theo thứ tự asc không có tên cột

SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY ASC 

Không có tên cột nào theo thứ tự theo mệnh đề. Điều này có thể không? SSMS nói không.

Jörg

+4

Không thể, bạn phải đặt 'order_by_expression' trong mệnh đề [**' ORDER BY' **] (http://msdn.microsoft.com/en-us/library/ms188385.aspx). Nhưng *** tại sao *** bạn muốn làm như vậy? Làm thế nào SQL Server 'ORDER BY' mà cột trong trường hợp này? –

+1

Bạn làm cách nào để vượt qua _ truy vấn này? –

+0

Không bao giờ nó hoạt động cho tôi. –

Trả lời

10

Nó có thể là một in lầm - bạn phải chỉ rõ bạn đang ra lệnh bằng; đây có thể là tên cột, biểu thức hoặc số của một cột ở đầu ra. Nó có khả năng nhất mà truy vấn mà bạn đã thấy là một trong những trường hợp sau, mà chỉ đơn giản bỏ qua số cột 1 - như vậy:

SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY 1 ASC 

- vì vậy đây sẽ đặt hàng bằng nội dung của cột đầu tiên của đầu ra (ví dụ. country).

+5

+1 Không nhắm vào bạn Mark, nhưng đối với bất cứ ai đọc điều này, sắp xếp theo vị trí thứ tự được cau mày trong mã sản xuất - SQL Server MVP Aaron Bertrand có một mục blog giải thích lý do: [Thói quen xấu để đá: ORDER BY ordinal] (http : //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick-order-by-ordinal.aspx) – Bridge

+0

Cảm ơn, Mark.Tôi chỉ muốn chắc chắn rằng tôi đã không bỏ qua someting. –

1

Tôi đồng ý với @Mahmoud Gamal. Tuy nhiên, cũng có thể viết như vậy như thế này -

SELECT o.country, const_column = 1 
FROM Hovercraft.Orders o 
GROUP BY o.country 
ORDER BY const_column ASC 

Trong trường hợp này, sắp xếp sẽ được thực hiện, nhưng thứ tự của hàng sẽ không bị thay đổi.

Mở MS SQL 2005:

Proff for @Martin Smith

Mở MS SQL 2012:

Proff for @Martin Smith

+1

Tôi không thấy bất kỳ phân loại nào được thực hiện khi tôi thử 'SELECT *, const_column = 1 FROM master..spt_values ​​ORDER BY const_column ASC' (và không thấy điều này có liên quan đến câu hỏi như thế nào) –

+0

Xin cho biết, cho những gì thiết lập một trừ? @ Jörg Weigel hỏi "Không có tên cột nào được đưa ra theo thứ tự theo mệnh đề?", Vì vậy tôi đã viết truy vấn chỉ cho ví dụ, phân loại một giá trị không đổi. – Devart

+0

Tôi đã thử nghiệm sự cố này trong phiên bản máy chủ năm 2005. – Devart

0

Điều này là không thể! ..

Đặt hàng theo mệnh đề luôn yêu cầu tên cột hoặc số cột.

Bạn vui lòng trả lời tôi tại sao bạn muốn loại tình huống này, tôi nghĩ bạn đang làm việc với truy vấn động hoặc người nào khác vui lòng cho tôi biết.

Theo tiêu chuẩn SQL, điều này là không thể.

Cảm ơn.

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