2010-09-08 63 views
6

tôi đang cố gắng để có được những truy vấn sau đây để hiển thị các kết quả theo thứ tự ABC của thành phố ngoại trừ một thực tế mà tôi muốn "Berlin" xuất hiện ở phía trên cùng của danh sáchSQL Server - Sắp xếp theo trường hợp

Vì vậy, các kết quả sẽ giống như

  • Berlin
  • Algeria
  • Úc
  • Fiji
  • Hy Lạp
  • ...

Hy vọng rằng sẽ có ý nghĩa,

Tôi hiện có sau đây ...

SELECT CompanyName, City 
FROM customers 
ORDER BY case when City = 'Berlin' END 

Trả lời

1
SELECT CompanyName, City 
FROM customers 
ORDER BY case when City = 'Berlin' then 1 else 999 END asc 
+1

Hãy tha thứ cho sự thiếu hiểu biết của tôi nhưng điều này có nghĩa là gì "sau đó 1 người khác 999" ?? – Tom

+1

Dữ liệu từ Case. Khi Berlin của nó nó trả về 0 người khác nó trả về 999 –

+0

làm truy vấn này cần khách hàng cũng theo thứ tự theo mệnh đề? Nếu không có nó không cho kết quả cho các cột số –

15

Hầu như:

SELECT CompanyName, City 
FROM customers 
ORDER BY CASE WHEN City = 'Berlin' THEN 0 ELSE 1 END, City 
+0

Âm thanh như thế này sẽ làm việc, nhưng tại sao nó không trên trang tryit SQL này ?? – Tom

+0

http://www.w3schools.com/sql/sql_tryit.asp – Tom

2

Hãy thử một cái gì đó như

SELECT CompanyName, City 
FROM customers 
ORDER BY case when City = 'Berlin' THEN 0 ELSE 1 END, City 
7
SELECT CompanyName, City, CASE WHEN City = 'Berlin' THEN 0 ELSE 1 END AS Ordering 
FROM customers 
ORDER BY Ordering, City 
+1

+1 cho tuân thủ SQL-92 nghĩa là chỉ các tên cột từ mệnh đề 'SELECT' nên được sử dụng trong mệnh đề' ORDER BY'. Tôi đã chọn để nhắm mắt làm ngơ đến từ khóa 'AS' còn thiếu, tức là 'AS Ordering';) – onedaywhen

+0

Tốt nhất. Đã chỉnh sửa câu trả lời –

1

chuỗi Như trống xuất hiện đầu tiên trong bất kỳ danh sách chuỗi lệnh, tất cả các kết quả khác được sắp xếp bình thường. Vì vậy, đây hoạt động hoàn hảo:

SELECT CompanyName, City 
FROM customers 
ORDER BY CASE WHEN City = 'Berlin' THEN '' ELSE City END 

Thử nghiệm với:

CREATE TABLE customers (CompanyName VARCHAR(50), City VARCHAR(50)) 

INSERT INTO customers VALUES ('Customer1', 'Berlin') 
INSERT INTO customers VALUES ('Customer2', 'Algeria') 
INSERT INTO customers VALUES ('Customer3', 'Australia') 
INSERT INTO customers VALUES ('Customer4', 'Fiji') 
INSERT INTO customers VALUES ('Customer5', 'Greece') 

SELECT CompanyName, City 
FROM customers 
ORDER BY CASE WHEN City = 'Berlin' THEN '' ELSE City END 

-- OUPUT 
-- Customer1 Berlin 
-- Customer2 Algeria 
-- Customer3 Australia 
-- Customer4 Fiji 
-- Customer5 Greece 
0

Làm thế nào về việc sử dụng Liên minh? Một cái gì đó như thế này, ví dụ:

SELECT 1 as Weight, CompanyName, City FROM customers 
WHERE city='Berlin' 
UNION ALL 
SELECT 2 as Weight, CompanyName, City FROM 
customers 
WHERE city<>'Berlin' 
ORDER BY Weight, City 
+2

Điều đó không hiệu quả; ORDER BY áp dụng cho toàn bộ công đoàn, và bạn sẽ vẫn còn lại với Algeria lên hàng đầu. – LittleBobbyTables

+0

Cảm ơn nhận xét. Nhưng bây giờ với dấu ngoặc đơn nó hoạt động chính xác. Tôi đã sử dụng trang thử nghiệm SQL để kiểm tra –

+0

Xin lỗi, không, sai, sai lầm của tôi. Liên minh tất cả bỏ qua thứ tự thực sự ... –

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