私はこの問題を解決するために使用してしまったクエリがあります。すべての列に対してmax()を使用するとうまくいきました。次に、1つの列に2つ以上の値エントリを持つテストIDを減算し、残っていたものは正しいものでした。私はmax()を使うのは数値ではない値のどれかを使ったとは思わなかった。これらの値は空のセルよりも価値があるため、おそらく機能しました。
しかし、私はのようなものを使用している可能性:
select max(to_number(regexp_substr())
と私は念のために、これが再び行われる必要があることを行うことができます。これらのテストIDのmax()出力を乱してしまったので、重複したエントリを削除することに集中する必要がありました。
---*** Takes the max or the value of the only entry in a column
create or replace view maxdataset as
select t.smpl_id,
t.matl_cd,t.geog_area_t,
max(t.assay) as assay,
max(t.effectiveness_pns_score_) as effectiveness_pns_score,
max(t.pns_blank) as pns_blank,
max(t.pns_nacl) as pns_nacl,
max(t.settable_solids) as settable_solids,
max(t.perc_pass_10m) as perc_pass_10m,
max(t.ph) as ph,
max(t.as_) as as_,
max(t.ba) as ba,
max(t.cd) as cd,
max(t.cr) as cr,
max(t.cu) as cu,
max(t.pb) as pb,
max(t.hg) as hg,
max(t.se) as se,
max(t.zn) as zn,
max(t.cn) as cn,
max(t.p) as p,
max(t.s) as s,
max(t.sulfate) as sulfate,
max(t.phosphate) as phosphate,
max(t.k) as k,
max(t.ca) as ca,
min(t.mg) as mg,
max(t.nitrite) as nitrite,
max(t.nitrate) as nitrate,
max(t.chloride) as chloride
from leslietable t
group by t.smpl_id,t.matl_cd,t.geog_area_t
;
---*** Removes just test ID rows with columns having more than one entry per test ID
create or replace view doubleEffect_short as
select t.smpl_id
from LESLIETABLE t inner join LESLIETABLE s
on t.smpl_id = s.smpl_id where
(t.effectiveness_pns_score_ <> s.effectiveness_pns_score_) or
(t.pns_blank <> s.pns_blank) or (t.pns_nacl <> s.pns_nacl) or
(t.settable_solids <> s.settable_solids) or
(t.perc_pass_10m <> s.perc_pass_10m) or
(t.ph <> s.ph) or (t.as_ <> s.as_) or
(t.as_ <> s.as_) or (t.ba <> s.ba) or
(t.cd <> s.cd) or (t.cr <> s.cr) or
(t.cu <> s.cu) or (t.pb <> s.pb) or
(t.hg <> s.hg) or (t.se <> s.se) or
(t.zn <> s.zn) or (t.cn <> s.cn) or
(t.p <> s.p) or (t.sulfate <> s.sulfate) or
(t.phosphate <> s.phosphate) or
(t.k <> s.k) or (t.ca <> s.ca) or
(t.mg <> s.mg) or (t.nitrite <> s.nitrite) or
(t.nitrate <> s.nitrate) or (t.chloride <> s.chloride)
group by t.smpl_id
order by t.smpl_id
;
---*** Outputs all columns from max data set having more than one value per column
create or replace view final_data_sifter as
select t.smpl_id,t.matl_cd,t.geog_area_t,t.assay,t.effectiveness_pns_score,
t.pns_blank,t.pns_nacl,t.settable_solids,t.perc_pass_10m,t.ph,t.as_,t.ba,t.cd,
t.cr,t.cu,t.pb,t.hg,t.se,t.zn,t.cn,t.p,t.s,t.sulfate,t.phosphate,t.k,t.ca,t.mg,
t.nitrite,t.nitrate,t.chloride
from maxdataset t join doubleeffect_short s
on t.smpl_id = s.smpl_id
;
---*** Sutracts rows with multiple values per column from max data set
create or replace view finalDataset_incomplete as
select * from maxdataset t
minus
select * from final_data_sifter
あなたは別名とグループの両方を使用しています。あなたがする必要があるようなサウンドは、別のものを失うことです。s.smpl_idカラムを除いて、グループからs.smpl_idカラムをすべて削除し、s.smpl_idを除くすべてのカラムの周りに 'MAX()'を追加します。列に存在する値。これらの結果は、11g以前のスタイルのピボットクエリの半分点に非常によく似ています(これは、列が集約関数を1つの行に崩壊させる場所を意味します)。 – Boneist
それで、MAX()は各列が非常に多く存在することができると述べていますか? –
'MAX()'は単にグループ全体でその列内の最大値を返します。列に複数の値がある場合、特定のsmpl_idに対してその列に何を表示したいですか? – Boneist