2016-07-11 9 views
0

テーブル「デバイス」にデバイスを格納する列「DeviceName」があります。通常、この列には一意のデバイスしかし、私はそれらのいくつかは、「デバイス1」AND「Device1.domain.com」として表示されていることが分かった"devicex"と "devicex.domain.com on Oracle"として存在する列のすべてのエントリを一覧表示する方法

リストのようなものになります。私はこの中にいるすべてのデバイスをリストする必要が

Device1 
Device1.domain.com 
Device2 
Device3 
Device4 
Device4.domain.com 
Device7 
Device11 
Device12 
etc... 

をケース:

Device**1** 
Device**1**.domain.com 
Device**4** 
Device**4**.domain.com 
etc... 

私が理解する限り、最初の "。"で停止して "。"を含むすべてのDeviceNameの最初の部分を抽出し、それを他のすべてのDeviceNameと比較して2回存在するすべてを出力する必要があります。

私はこれがで達成されなければならないと仮定したが(私は通常かなり単純なクエリを書く私は(例えばhttp://www.techonthenet.com/oracle/functions/regexp_substr.phpなど)多くのサイトを見て、私は完全に失われたんだ。

任意のヒント下さい!

感謝事前に

答えて

1

これはあなたにすべての重複を与える必要があります:あなたのデータを

select * from (
    select d.*, count(*) over (partition by substr(deviceName,1,decode(instr(deviceName,'.'),0,length(deviceName),instr(deviceName,'.')-1))) as rn 
    from devices d 
    ) 
    where rn > 1 
    ; 

を私は次の出力を得る:

deviceName   rn 
Device1.domain.com 2 
Device1 2 
Device4.domain.com 2 
Device4 2 
+0

大変感謝! :) 私はまだこの近くにも何の結果でもしようとしていませんでした! – druid

+0

@druid - うれしい! Regexpは複雑なものには本当にうれしいですが、この場合substrとinstrで十分でした。 – vercelli