Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 如何从UNION ALL中的另一个视图访问字段?_Sql_Oracle - Fatal编程技术网

Sql 如何从UNION ALL中的另一个视图访问字段?

Sql 如何从UNION ALL中的另一个视图访问字段?,sql,oracle,Sql,Oracle,目前我使用的是一个'UNION ALL',因为它们的ID完全不同。这是因为每个视图中的WHERE条件。第一个视图(v1)计算所有5种类型,仅计算小于1000的小时数。对于第二个视图(v2),使用相同的类型,但仅使用大于1000的小时数 编辑: 这是我的代码: SELECT skill_type ,sched_hours AS sched_hours_online ,actual_hours AS actual_hours_online

目前我使用的是一个
'UNION ALL'
,因为它们的ID完全不同。这是因为每个视图中的WHERE条件。第一个视图(v1)计算所有5种类型,仅计算小于1000的小时数。对于第二个视图(v2),使用相同的类型,但仅使用大于1000的小时数

编辑:

这是我的代码:

 SELECT
         skill_type
        ,sched_hours AS sched_hours_online
        ,actual_hours AS actual_hours_online
        ,'' AS sched_hours_offline
        ,'' AS actual_hours_offline
    FROM (
    SELECT DISTINCT
           myID
          ,skill_type 
          ,sched_hours
          ,actual_hours
    FROM (
         SELECT DISTINCT
              ex.myID AS myID
             ,ex2.skill_type AS skill_type
             ,SUM(ex2.sched_hr) OVER (PARTITION BY ex2.skill_type) AS sched_hours
             ,SUM(ex2.actual_hr) OVER (PARTITION BY ex2.skill_type) AS actual_hours
          FROM example ex
          --
          JOIN example_join ex1
            ON ex1.myID = ex.myID
          --
          JOIN example_join2 ex2
            ON ex2.myID = ex1.myID
          WHERE (ex1.total_hours < 1000)
    ) v1

    UNION ALL

    SELECT DISTINCT
           myID
          ,skill_type 
          ,sched_hours
          ,actual_hours
    FROM (
         SELECT DISTINCT
              ex.myID AS myID
             ,ex2.skill_type AS skill_type
             ,SUM(ex2.sched_hr) OVER (PARTITION BY ex2.skill_type) AS sched_hours
             ,SUM(ex2.actual_hr) OVER (PARTITION BY ex2.skill_type) AS actual_hours
          FROM example ex
          --
          JOIN example_join ex1
            ON ex1.myID = ex.myID
          --  
          JOIN example_join2 ex2
            ON ex2.myID = ex1.myID
          WHERE (ex1.total_hours > 1000)
    ) v2
)

但由于某些原因,我无法访问v1和v2。

您需要在每个要通过union all组合的选择中都有空列

SELECT
     skill_type
    ,sched_hours AS sched_hours_online
    ,actual_hours AS actual_hours_online
    ,'' AS sched_hours_offline
    ,'' AS actual_hours_offline
FROM (...

UNION ALL

SELECT
     skill_type
    ,'' AS sched_hours_online
    ,'' AS actual_hours_online**
    ,sched_hours  AS sched_hours_offline
    ,actual_hours AS actual_hours_offline
FROM (...

在每个要通过union all组合的选择中,需要有空列

SELECT
     skill_type
    ,sched_hours AS sched_hours_online
    ,actual_hours AS actual_hours_online
    ,'' AS sched_hours_offline
    ,'' AS actual_hours_offline
FROM (...

UNION ALL

SELECT
     skill_type
    ,'' AS sched_hours_online
    ,'' AS actual_hours_online**
    ,sched_hours  AS sched_hours_offline
    ,actual_hours AS actual_hours_offline
FROM (...

各表中的技能类型是否相同?你能加入这些吗?这与加入本身无关。如果我可以访问像v1和v2这样的字段,那就好了。但我不能。也许我做错了什么。或者这是不可能的。请再次参考@llythya的问题。您需要与SKILL_类型在同一行上输出,因此在线/离线配对如何彼此并排而不相关。如果v2比v1有更多的行呢?我理解@Ilythya的意思,但它比v1复杂一点。v2的行数是否多于v1并不重要。由于ID不同,这两个视图彼此不相关。第一个视图显示每种类型小于1000的所有小时数(联机小时数),第二个视图显示每种类型大于1000的所有小时数(脱机小时数)。我编辑了我的帖子。希望我现在解释得更好。当然。但是你说两个视图都显示了每种类型的小时数-如果类型相同,那么你实际上想要的可能是技能类型上两个视图之间的完全外部连接-而不是一个联合。所有表中的技能类型都相同吗?你能加入这些吗?这与加入本身无关。如果我可以访问像v1和v2这样的字段,那就好了。但我不能。也许我做错了什么。或者这是不可能的。请再次参考@llythya的问题。您需要与SKILL_类型在同一行上输出,因此在线/离线配对如何彼此并排而不相关。如果v2比v1有更多的行呢?我理解@Ilythya的意思,但它比v1复杂一点。v2的行数是否多于v1并不重要。由于ID不同,这两个视图彼此不相关。第一个视图显示每种类型小于1000的所有小时数(联机小时数),第二个视图显示每种类型大于1000的所有小时数(脱机小时数)。我编辑了我的帖子。希望我现在解释得更好。当然。但是你说两个视图都显示了每种类型的小时数——如果类型相同,那么你实际上想要的可能是技能类型上两个视图之间的完全外部连接——而不是一个联合。