2017-09-13 77 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 (...