2010-09-08 46 views
6

我試圖讓下面的查詢,除了我想要的「柏林」,在列表的頂部出現SQL服務器 - 訂購情況

所以事實顯示由城市按字母順序排列的結果結果看起來像

  • 柏林
  • 阿爾及利亞
  • 澳大利亞
  • 斐濟
  • 希臘
  • ...

希望是有道理的,

我公司目前有以下...

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

回答

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

請原諒我的無知,但這是什麼意思是「那麼其他1 999」? – Tom 2010-09-08 10:47:29

+1

來自案例的數據。柏林時,它返回0否則它返回999 – 2010-09-08 10:48:32

+0

做這個查詢需要客戶以及爲了條款?如果沒有,它不給數字列的結果 – 2010-09-08 10:58:40

15

差不多:

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

這樣的聲音應該工作,但爲什麼不在這個SQL tryit頁面? – Tom 2010-09-08 11:04:59

+0

http://www.w3schools.com/sql/sql_tryit.asp – Tom 2010-09-08 11:05:55

2

試試像

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符合SQL-92規則,即只有'SELECT'子句的列名應該用在'ORDER BY'子句中。我已選擇對缺少的AS'關鍵字即'AS Ordering'視而不見;) – onedaywhen 2010-09-09 09:17:15

+0

好的。編輯答案 – 2010-09-09 11:42:57

1

由於空字符串第一次出現在任何字符串排序列表,所有其他結果正常排序。所以這完美的作品:

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

測試了:

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

有關使用聯盟如何?像這樣的東西,例如:

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

這是行不通的; ORDER BY適用於整個工會,並且您仍然將阿爾及利亞留在最上面。 – LittleBobbyTables 2010-09-08 11:29:16

+0

感謝您的評論。但現在用括號表示它正常工作。我使用SQL tryit頁面來檢查 – 2010-09-08 11:43:39

+0

對不起,不,這是錯的,我的錯誤。聯盟都實際上忽略了排序... – 2010-09-08 11:46:28