2017-04-13 5 views
1

別の表の列を使用して新しい表を作成したいとします。列xに一意の値がある行のみを選択する必要があります。列xは、列aのトリミングされた値で構成する必要があります。oracle sqlの複数列表の1つの列の一意の値

これは私のコードです:

create table nodupli as 
    select distinct(regexp_replace(a,'[[:space:]]|[[:punct:]]','')) as x, 
     B, 
     C, 
     D 
    from table1 
order by x; 

私は列xに一意の値を持つ行のみを含めるにはどうすればよいですか?

答えて

1

あなたは結果のクエリが編集

create table nodupli as 
select regexp_replace(t1.a,'[[:space:]]|[[:punct:]]','') as x, 
     t1.B, 
     t1.C, 
     t1.D 
from table1 t1 
join (
      select regexp_replace(a,'[[:space:]]|[[:punct:]]','') as x 
      from table1 
      group by regexp_replace(a,'[[:space:]]|[[:punct:]]','') 
      having count(*) = 1 
     ) t2 
on  regexp_replace(t1.a,'[[:space:]]|[[:punct:]]','') = t2.x 
order by x; 

だろう

select x 
from table1 
group by x 
having count(*) = 1 

のように、唯一のユニークなxの値を返す別のもので、そのクエリに参加でき

以前joinxがcalに与えられたエイリアスであるため、条件が間違っていましたselectに列挙しているので、何とか「プレゼンテーションレベル」にあります。実際の列名は元の列名ですが、joinの条件でそれを使用する必要があります。私は自分のクエリを編集しましたが、これは正しいはずです。

+0

ありがとうございます。ジョイント括弧内の 'table1 t1'から始めるべきではありませんか? – yPennylane

+0

ありがとう、私はそれを編集しました。内側のクエリと外側のクエリの両方で同じエイリアスが混乱する可能性があるので、内側のt1.aからエイリアスを削除しました。これは不要なためです。 –

+0

自分のデータでコードをテストし、エラー00904を取得しました。 00000 - "G1"。 "X":g1.x = g2.x'の行の無効な識別子 "' x in in clob形式です。それが機能しないのはなぜですか? – yPennylane

関連する問題