現在、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
)
は、これは私が現在、私の出力に見えるものです:
'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へのアクセスを持っていない何らかの理由:私はこのような何かを行うことができると思いました。
スキルタイプはテーブル全体で同じですか?代わりにそれらに参加できますか? – Ilythya
これは、結合そのものに関するものではありません。私がv1やv2のようなフィールドにアクセスできるのであれば問題ありません。しかし、私はできません。おそらく、私は間違ったことをしています。それともそれだけでは不可能です。 – Jamie
@ llythyaの質問をもう一度参照してください。 * SKILL_TYPE *を使用して同じ行に出力する必要があるため、オンライン/オフラインのペアリングがどのように並んで相互に関連しているかは関係ありません。 v2にv1よりも多くの行がある場合はどうなりますか? – Parfait