2

sale date 4テーブルには, sale date 3, sale date 2, の4 つの列sale dateがあり、すべて販売日です。空でない場合はページに表示するsale date 4ことが最優先されますが、表示している場合は、空である場合は次のようにsale date 3なりsale date 2ますsale date

私の問題は、結果を並べ替えている間です。

order by でクエリを実行する場合

order by 
isnull(`sale date 4`), trim(`sale date 4`) , 
isnull(`sale date 3`), trim(`sale date 3`) , 
isnull(`sale date 2`), trim(`sale date 2`) , 
isnull(`sale date`), trim(`sale date`) asc

私は次のように結果を得ています

**sale date 4** | **sale date 3**  | **sale date 2** | **sale date**
--------------------------------------------------------------------
2013-01-24      | 2013-01-24       | 2013-01-24      | 2013-01-24    
2013-01-31      | 2013-01-31       | 2013-01-31      | 2012-11-30    
2013-02-01      | 2013-02-01       | 2013-02-01      | 2013-02-01    
2013-03-08      | 2013-03-08       | 2013-03-08      | 2013-03-08    
----NULL----    | ----NULL----     | 2013-02-28      | 2012-11-02    
----NULL----    | ----NULL----     | ----NULL----    | 2013-02-28

ビューに表示すると、次のようになります

1. Sale date = 2013-01-24
2. Sale date = 2013-01-31
3. Sale date = 2013-02-01
4. Sale date = 2013-03-08
5. Sale date = 2013-02-28
6. Sale date = 2013-02-28

しかし、私が必要なのは

1. Sale date = 2013-01-24
2. Sale date = 2013-01-31
3. Sale date = 2013-02-01
4. Sale date = 2013-02-28
5. Sale date = 2013-02-28
6. Sale date = 2013-03-08

どうすればこれを達成できますか?

4

2 に答える 2

4

isnull(column)trueまたはを返すだけfalseです。これにより、最初の 4 つのレコードが最初の 4 つの結果 ( true > false) になり、レコード 5 と 6 が最後の 2 つの結果になります。最後の 2 つの結果はsale date 4(NULL両方の列で) まで並べ替えられsale date 1ますが、順序付きリストの最後の 2 つの項目のままです。

あなたがやりたいことは、おそらく次のようなものです:

.. ORDER BY IFNULL(`sale date 4`, IFNULL(`sale date 3`,
            IFNULL(`sale date 2`, `sale date 1`)))
于 2013-01-23T10:57:07.010 に答える
2

次の方法で注文できます。

coalesce(`sale date 4`, `sale date 3`, `sale date 2`, `sale date`)

COALESCEは最初の非 NULL 値を返します。

coalesce(1,2,3,4)             returns 1
coalesce(null,2,3,4)          returns 2
...
coalesce(null,null,null,null) returns null
于 2013-01-23T11:05:03.130 に答える