Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何以不同的分组方式组合同一表中的两个查询?(甲骨文)_Sql_Oracle - Fatal编程技术网

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 );