2017-09-13 15 views
0

現在、IDは完全に異なるため、'UNION ALL'を使用しています。これは、各ビューのWHERE条件のためです。最初のビュー(v1)は、すべての5つのタイプについて、1000より小さい時間のみを計算します。2番目のビュー(v2)については、同じタイプですが、1000より大きい時間のみです。UNION ALLの別のビューからフィールドにアクセスするには?

EDITED:

これは私のコードです:

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"と呼ばれる同じTYPEの2番目のレコードの右側の列になければなりません。しかし、私はそれをどうやって行うのか分かりません。

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

ユニオンで組み合わせるすべての選択項目に空の列が必要です。

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 (... 
関連する問題