Sql 如何以不同的分组方式组合同一表中的两个查询?(甲骨文)
我需要计算一下到达和离开的时间。查询是否准时出发:Sql 如何以不同的分组方式组合同一表中的两个查询?(甲骨文),sql,oracle,Sql,Oracle,我需要计算一下到达和离开的时间。查询是否准时出发: SELECT DEPAIRPORT as AIRPORT, COUNT(case when A.STATUS = 'Scheduled' and A.ACTUAL_BLOCKOFF is not null then 1 else NULL END) as SCHEDULED, COUNT(case when ((A.ACTUAL_BLOCKOFF+ interval '7' hour) - (A.SCHEDULED_D
SELECT DEPAIRPORT as AIRPORT,
COUNT(case when A.STATUS = 'Scheduled' and
A.ACTUAL_BLOCKOFF is not null then 1 else NULL END) as SCHEDULED,
COUNT(case when ((A.ACTUAL_BLOCKOFF+ interval '7' hour) - (A.SCHEDULED_DEPDT+ interval '7' hour))*24*60 <= '+000000015 00:00:00.000000000' and
A.ACTUAL_BLOCKOFF is not null then 1 else NULL END) as ONTIME
FROM TABLE A GROUP BY DEPAIRPORT
选择机场作为机场,
计数(当A.STATUS='Scheduled'和
A.按计划,实际_封锁不为空,则为1(否则为空结束),
计数(情况是((A.实际封锁+间隔'7'小时)-(A.计划封锁+间隔'7'小时))*24*60您可以这样使用:
select
max(SCHEDULED) as SCHEDULED,
max(ONTIME) as ONTIME,
max(ARRONTIME) as ARRONTIME
from (select
count(case when ... ) over(partition by DEPAIRPORT) as SCHEDULED,
count(case when ... ) over(partition by DEPAIRPORT) as ONTIME,
count(case when ... ) over(partition by ARRIVALAIRPORT) as ARRONTIME
from a );
但是我想你的问题还不完整。你还需要一个键来加入不同的航班。如果没有样本数据和预期的输出,很难说出你到底想要什么。如果你想合并这两个数据集,你可以将它们与
子句一起放入,然后将它们连接在一起(LEFT JOIN
或internal JOIN
基于到达与否情况下所需的输出)
与dep
AS(选择机场作为机场,
计数(大小写)
当a.status='Scheduled'
而a.react_blockoff不为空,则为1
(完)如期,,
计数(大小写)
当((a.实际封锁+间隔“7”小时)-(
a、 计划深度+间隔“7”小时)*
24 *
60
你刚刚救了我的命。上面的代码运行得很好,并且产生了我想要的结果。非常感谢。我希望有一天我能给你买杯咖啡。@KaushikNayak@user1725887:不客气。当然,我很乐意。我已经尝试了上面的代码,但没有得到我想要的结果。但是,谢谢。@Alexandr
select
max(SCHEDULED) as SCHEDULED,
max(ONTIME) as ONTIME,
max(ARRONTIME) as ARRONTIME
from (select
count(case when ... ) over(partition by DEPAIRPORT) as SCHEDULED,
count(case when ... ) over(partition by DEPAIRPORT) as ONTIME,
count(case when ... ) over(partition by ARRIVALAIRPORT) as ARRONTIME
from a );
WITH dep
AS (SELECT depairport AS airport,
count(CASE
WHEN a.status = 'Scheduled'
AND a.actual_blockoff IS NOT NULL THEN 1
END) AS scheduled,
count(CASE
WHEN( ( a.actual_blockoff + interval '7' hour ) - (
a.scheduled_depdt + interval '7' hour ) ) *
24 *
60
<=
'+000000015 00:00:00.000000000'
AND a.actual_blockoff IS NOT NULL THEN 1
END) AS ontime
FROM tablea
GROUP BY depairport),
arr
AS (SELECT arrivalairport AS airport,
count(CASE
WHEN( ( a.actual_blockon + interval '7' hour ) - (
a.scheduled_arrdt + interval '7' hour ) ) *
24 *
60
<=
'+000000015 00:00:00.000000000'
AND a.actual_blockon IS NOT NULL THEN 1
END) AS arrontime
FROM tablea
GROUP BY arrivalairport)
SELECT dep.airport AS Name,
dep.scheduled AS "#Schedule",
dep.ontime AS "#OnTimeDeparture",
arr.arrontime AS "#ArrivalOntime"
FROM dep
left join arr -- Or Inner join depending on the expected output.
ON ( dep.airport = arr.airport );