我有,目前带来了数据这样的查询:在SQL Server中订购NULL结果有所不同?
ID | Name | Arrival | Departure
-----------------------------------
1 | John | NULL | 2:30:00
2 | John | NULL | 11:00:00
3 | John | NULL | 14:00:00
4 | John | 10:30:00 | 11:00:00
5 | John | 12:00:00 | 13:00:00
这是我做的事:order by Name, Arrival, Departure
。
不过,我想的却是以下几点:
- 如果到达条目
NULL
,然后行应该由 出发列排序。 - 如果到达条目
NULL
和 有与相同的出发数据多行,那么它 应该后下令有一个到达 进入其他行。
结果:
ID | Name | Arrival | Departure
-----------------------------------
1 | John | NULL | 2:30:00
4 | John | 10:30:00 | 11:00:00
2 | John | NULL | 11:00:00
5 | John | 12:00:00 | 13:00:00
3 | John | NULL | 14:00:00
编辑:对于那些谁认为这是一个重复的问题 - 原来的问题是不一样的,由于第二个条件。但是,由于我的数据结构(抵达时间总是在出发时间之前),因此同样的答案也适用。
编辑2:出发也可以为NULL。当出发为空时,到达条目是非空的。如果是这种情况,应该按到货顺序。如果两行都具有相同的到达条目,则NULL应该为非空值之前。注意,这与NULL到达条目(上面的条件2)相反,其中NULL在非空值之后。
[条件ORDER BY取决于列值]的可能重复(http://stackoverflow.com/questions/7464434/conditional-order-by-depending-on-column-values) –
第二条规则有点不清楚我。你的意思是说,如果到达第4排的时间是11:00:00,那么它应该总是排在一个空到达和11:00:00出发的行之前。 –
@JoachimIsaksson我的意思是对于离开值相同的行,则具有空到达值的条目应该低于具有非空到达值的行。我提到它的原因是因为通常在非空值之前排序NULL。在上面的预期结果中,第4行位于第2行上方,因为它具有非空的到达值。 – painiyff