2

我的表中有四列sale date 4, sale date 3, sale date 2,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)简单地返回trueor false。这导致前 4 个记录是前 4 个结果 ( true > false),记录 5 和 6 是最后两个结果。最后两个结果然后按sale date 4NULL在两列中)排序,直到sale date 1,但它们仍然是有序列表中的最后两个项目。

你想要做的可能是这样的:

.. 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 回答