IDごとに1行のELEC、WATER、およびRATIOカラムを使用して結果を「提示」することは、より意味があります。下のソリューションは、それを効率的に行う方法を示しています(ベーステーブルを1回だけ読み取る)。
with
inputs (id, name, value) as (
select 1, 'elec' , 10 from dual union all
select 1, 'water', 20 from dual union all
select 2, 'elec' , 15 from dual union all
select 2, 'water', 45 from dual
)
-- End of simulated inputs (not part of the solution).
-- SQL query begins BELOW THIS LINE. Use your actual table and column names.
select id, elec, water, round(elec/water, 2) as ratio
from inputs
pivot (min(value) for name in ('elec' as elec, 'water' as water))
;
ID ELEC WATER RATIO
---------- ---------- ---------- ----------
1 10 20 .5
2 15 45 .33
あなたがあなたのオリジナルのポストに示したフォーマットの結果は、あなたがそう(まだ一度だけベーステーブルを読み込む)のようなアンピボットできる必要がある代わりに、場合:
with
inputs (id, name, value) as (
select 1, 'elec' , 10 from dual union all
select 1, 'water', 20 from dual union all
select 2, 'elec' , 15 from dual union all
select 2, 'water', 45 from dual
)
-- End of simulated inputs (not part of the solution).
-- SQL query begins BELOW THIS LINE. Use your actual table and column names.
select id, name, value
from (
select id, elec, water, round(elec/water, 2) as ratio
from inputs
pivot (min(value) for name in ('elec' as elec, 'water' as water))
)
unpivot (value for name in (elec as 'elec', water as 'water', ratio as 'ratio'))
;
ID NAME VALUE
---------- ----- ----------
1 elec 10
1 water 20
1 ratio .5
2 elec 15
2 water 45
2 ratio .33
がトリガー –
「コレクションを検索"は技術用語です。 「SELECTクエリの結果に行を追加する」という意味ですか?それは「コレクション」とは関係ありません。本当に「コレクション」を意味する場合は、「希望の結果」として表示するものがコレクションのように見えないため、説明してください。 – mathguy
また、「グループの後にテーブルがあります」という意味はどうですか? Oracleは、ディスクに格納されているものに「表」という用語を使用します。あなたは(いくつかのクエリで)GROUP BYして、新しいテーブルのディスクに結果を保存しますか?そうであれば、比率を最初に計算して、1回のパスで可能な限り問題全体を解決してください。 – mathguy