【发布时间】:2019-01-10 10:26:11
【问题描述】:
在自动生成序列号时面临问题。
我怎样才能以正确的方式使用row_number(),或者有什么替代方法可以达到预期的效果?
注意:我想在不使用CASE的情况下编写查询。
SELECT
row_number() over (order by COALESCE(legs.sta, legs.eta) ASC) sno,
legs.Flight_ID flightId,
legs.flight,
legs.flightDate
FROM Flt_OperativeFlight_Legs LEG
ORDER BY COALESCE(legs.sta, legs.eta) ASC
当前结果:
+------+--------+-------------------------+
| sno | flight | flightDate |
+------+--------+-------------------------+
| 1 | 3K0722 | 2019-01-08 17:10:00.000 |
| 2 | 3K0722 | 2019-01-08 20:20:00.000 |
| 3 | 3K0723 | 2019-01-09 17:10:00.000 |
| 4 | 3K0724 | 2019-01-10 20:20:00.000 |
+------+--------+-------------------------+
预期结果:
+------+--------+-------------------------+
| sno | flight | flightDate |
+------+--------+-------------------------+
| 1 | 3K0722 | 2019-01-08 17:10:00.000 |
| | | 2019-01-08 20:20:00.000 |
| 2 | 3K0723 | 2019-01-09 17:10:00.000 |
| 3 | 3K0724 | 2019-01-10 20:20:00.000 |
+------+--------+-------------------------+
【问题讨论】:
-
隔天id是+1是什么意思?
-
看起来更像是您想要
DENSE_RANK而不是ROW_NUMBER,但是,为什么第二行没有s.no、flt_id和flight的值?我猜这是一个表示的事情,但如果是这样的话,你应该在你的表示层而不是数据引擎中处理它。 -
为什么是
Coalesce?为什么不例如cast(FlightDate as date)?您的预期结果按 FlightDate 的日期部分排序和排名 -
@Larnu 因为同一个航班。
-
@PanagiotisKanavos 是的。可以的。
标签: sql sql-server tsql group-by rowcount