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このクエリを作成しましたが、列が null/空のデータがテーブルに含まれていると機能しません

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
4

2 に答える 2

6

私が読み間違えていない限り、あなたはあなた自身の質問に答えたように感じます。データがNULL.

重要な部分は、それNULLが とは異なるタイプであることです''。like'' = 0は false です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 を''に設定しない限り、そのまま使用できる可能性がありますSTATUS IS NULL

于 2012-05-29T04:31:18.677 に答える
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()関数は、null 以外の最初の引数STATUSNULL返し''ます。

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

于 2012-05-29T07:58:38.217 に答える