2012-05-29 69 views
1

我有一個表如下:編寫排序查詢

Job Quantity Status 
----------------------- 
1  100  OK 
2  400  HOLD 
3  200  HOLD 
4  450  OK 
5  300  
6  500  

我想我的結果將如下圖所示:

Job Quantity Status 
---------------------- 
4  450  OK 
2  400  HOLD 
1  100  OK 
3  200  HOLD 
6  500 
5  300 

我創造了這個查詢,但它不工作時,表包含其中status列爲空

SELECT 
    Job, 
    Quantity, 
    Status 
FROM 
    myTable 
ORDER BY CASE 
    WHEN QUANTITY >= 400 AND STATUS = 'OK' THEN 1 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 2 
    WHEN QUANTITY < 400 AND STATUS = 'OK' THEN 3 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 4 
    WHEN QUANTITY >= 400 AND STATUS = '' THEN 5 
    WHEN QUANTITY < 400 AND STATUS = '' THEN 6 
END 
+2

檢查IS NULL而不是'',看看它是否有所作爲。 –

回答

6

除非我誤讀,我覺得你的數據/空回答了你自己的問題。當您的數據爲NULL時,您需要說明。

重要的部分是NULL是與''不同的類型。就像'' = 0是假的,NULL = ''也是。 NULL用於表示空值。用布爾值而不是字符串思考它。很顯然,有些時候某些東西既不是真的也不是假的,這就是像NULL這樣的值會出現的地方。同樣,如果你認爲字符串是純數據而不是字符和單詞,那麼空值和沒有值之間是有區別的在所有。

欲瞭解更多信息,請參閱http://www.w3schools.com/sql/sql_null_values.asp

所以我覺得你的代碼應該是這樣的:

SELECT Job, Quantity, Status 
    FROM myTable 
ORDER BY CASE 
    WHEN QUANTITY >= 400 AND STATUS = 'OK' THEN 1 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 2 
    WHEN QUANTITY < 400 AND STATUS = 'OK' THEN 3 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 4 
    WHEN QUANTITY >= 400 AND (STATUS = '' OR STATUS IS NULL) THEN 5 
    WHEN QUANTITY < 400 AND (STATUS = '' OR STATUS IS NULL) THEN 6 
END 

除非你明確地將狀態設置爲'',你也許能夠只使用STATUS IS NULL

+0

在這篇文章的早期版本中,我錯誤地指出DB中NULL值的原因是爲了節省內存。它引起了我的注意,這是不正確的,我已經更新了我的答案以反映這一點。 – acattle

+0

謝謝。有效。 – user1345260

3

嘗試使用下面的查詢: -

SELECT 
    Job, 
    Quantity, 
    Status 
FROM 
    myTable 
ORDER BY CASE 
    WHEN QUANTITY >= 400 AND STATUS = 'OK' THEN 1 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 2 
    WHEN QUANTITY < 400 AND STATUS = 'OK' THEN 3 
    WHEN QUANTITY >= 400 AND STATUS = 'HOLD' THEN 4 
    WHEN QUANTITY >= 400 AND COALESCE(STATUS,'') = '' THEN 5 
    WHEN QUANTITY < 400 AND COALESCE(STATUS,'') = '' THEN 6 
END 

COALESCE()函數返回第一個非空參數,因此,如果STATUSNULL將返回''

http://www.sqlbook.com/SQL/SQL-Coalesce-28.aspx

+0

+1,因爲在這篇文章之前我真的從沒聽說過COALESCE。 – acattle