我在制定问题时遇到困难。 我有一个带来这些结果的观点。需要在视图中添加一列,该列将配对具有相同编号的往返航班。
Flt_No From_Airport To_Airport Dep_Date RequiredResult
124 |LCA |CDG |10/19/14 5:00 1
125 |CDG |LCA |10/19/14 10:00 1
197 |LCA |BCN |10/4/12 5:00 2
198 |BCN |LCA |10/4/12 11:00 2
501 |LCA |HER |15/8/12 12:05 3
502 |HER |LCA |15/8/12 15:15 3
即。 124航班从拉纳卡飞往CDG,125航班从CDG返回拉纳卡 - 它们都必须具有相同的标识符。
往返航班的航班号始终如下
我有一堆条件,我现在不会写
省略时间不是一种选择,它们很重要
我在考虑dense_rank()
,但我不知道如何为2个不同号码的航班创建一个标识符,请帮忙。
答案 0 :(得分:0)
加入条件不仅限于简单的相等。假设{Flight No,Departure,Destination}在任何一天都是唯一的,那么自我加入应该这样做:
select whatever
from flights outbound
inner join flights inbound on outbound.flt_no+1 = inbound.flt_no
and cast(outbound.dep_date, date)
= cast(inbound.dep_date, date)
and outbound.From_Airport = inbound.To_Airport
and outbound.To_Airpott = inbound.From_Ariport
答案 1 :(得分:0)
如果您的数据类似于发布的样本数据,则以下查询应提供所需的结果:
SELECT *,
DENSE_RANK() OVER (ORDER BY CASE
WHEN From_Airport < To_Airport THEN From_Airport
ELSE To_Airport
END)
FROM mytable
答案 2 :(得分:0)
以为我会在记事本中尝试一下。
select
flt_no, from_airport, to_airport, dep_date,
dense_rank() over (order by
convert(varchar,dep_date, 112),
(case when from_airport < to_airport then coalesce(from_airport, to_airport) else coalesce(to_airport, from_airport) end)
) as RankNum
from flights;