2017-09-13 86 views
0

目前我使用的是'UNION ALL',因为它们的ID是完全不同的。这是因为每个视图中的WHERE条件。第一视图(V1)计算所有5种类型中,只有那些小于1000。对于第二个视图(v2)中的相同类型小时,但仅是大于1000。如何访问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 (
    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 
) 

这是我在输出目前看到:

enter image description here

'UNION ALL'可以在图像中看到很棒的效果。但不幸的是,这不完全是我想要的。第一条记录(357.17和296.79)应位于相同类型的第二条记录(称为"SCHED_HOURS_OFFLINE""ACTUAL_HOURS_OFFLINE")下方的右列。但我不知道该怎么做。我以为我可以这样做:

SELECT 
     skill_type 
     ,v1.total_sched_hours AS sched_hours_online 
     ,v1.total_actual_hours AS actual_hours_online 
     ,v2.total_sched_hours AS sched_hours_offline 
     ,v2.total_actual_hours AS actual_hours_offline 
    FROM (

但由于某种原因,我没有访问v1和v2。

+0

整个表的技能类型是否相同?你能加入吗? – Ilythya

+0

这不是关于连接本身。如果我可以访问像v1和v2这样的字段,那就没问题。但我不能。可能我做错了什么。或者这是不可能的。 – Jamie

+0

请再次参考@ llythya的问题。您需要在* SKILL_TYPE *的同一行上输出,因此在线/离线配对如何彼此并排且无关联。如果v2的行数多于v1,该怎么办? – Parfait

回答

2

您需要在每个选项中都有空列,这些列要通过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 (...