我的表格中有四列sale date 4
,sale date 3
,sale date 2
,sale date
,这些列都是销售日期。在页面sale date 4
中显示的优先级如果不是空的,我们会显示它,如果它是空的,则显示sale date 3
,然后是sale date 2
,然后是sale date
。< / p>
我的问题是在对结果进行排序时。
何时通过
运行查询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
我该如何做到这一点?
答案 0 :(得分:4)
isnull(column)
只返回true
或false
。这导致前4个记录是前4个结果(true > false
),记录5和6是最后两个结果。然后,最后两个结果按sale date 4
(两列中NULL
)排序,最多为sale date 1
,但它们仍然是有序列表中的最后两项。
你想做的事情可能是这样的:
.. ORDER BY IFNULL(`sale date 4`, IFNULL(`sale date 3`,
IFNULL(`sale date 2`, `sale date 1`)))
答案 1 :(得分: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