gpt4 book ai didi

sql-server - 在 SQL Server 中订购 NULL 结果不同?

转载 作者:行者123 更新时间:2023-12-03 08:27:39 25 4
gpt4 key购买 nike

我有一个查询,目前会产生这样的数据:

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

这是我做的事情:按姓名、到达、离开订购

但是,我想要的是以下内容:

  1. 如果到达条目为 NULL,则行应按出发栏。
  2. 如果到达条目为 NULL 并且有多行具有相同的出发数据,那么它应在具有 Arrival 的其他行之后排序条目。

结果:

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:Departure 也可以为 NULL。当 Departure 为空时,Arrival 条目为非空。如果是这种情况,则应在 Arrival 订购。如果两行都具有相同的到达条目,则 NULL 应该在非空之前。请注意,这与 NULL 到达条目(上面的条件 2)相反,其中 NULL 在非空之后。

最佳答案

尝试一下

DECLARE @tbl TABLE(ID INT,Name VARCHAR(100),Arrival TIME,Departure TIME);
INSERT INTO @tbl VALUES
(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');

SELECT * FROM @tbl
ORDER BY Name,CASE WHEN Arrival IS NULL THEN Departure ELSE Arrival END

结果

1   John    NULL                02:30:00.0000000
4 John 10:30:00.0000000 11:00:00.0000000
2 John NULL 11:00:00.0000000
5 John 12:00:00.0000000 13:00:00.0000000
3 John NULL 14:00:00.0000000

您可能会考虑 ISNULL(),但您应该阅读“sargable”,尤其是当您处理许多行和索引时...

关于sql-server - 在 SQL Server 中订购 NULL 结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36484976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com