2017-02-22 2 views
0

Ich habe eine Anfrage, um einige Zeilen aus einer Quelle zu entfernen. Diese Quelle enthält drei Spalten: ID, Typ, Wert und definiert zusätzliche einige Daten wie:Informatica Cloud: Entfernen Sie doppelte mit Bedingung

Id Type Value 
1  Master This is the first value 
1  Second This is a new value 
1  Third This is not a mandatory value 
2  Master Another one 
2  Third And again 
3  Second A new hope 
3  Third A third 
4  Second A single value 
... 

Die Regel Zeile zu halten ist:

Wenn einzelne Zeile für eine Id, erhalten Sie den vorhandenen Wert

Else: Wenn mehrere Zeilen für gleiche Id und ‚Master‘ vorhanden ist, erhalten den ‚Master‘ Wert

Wenn mehrere Zeilen für gleiche Id und ‚Master‘ nicht existiert und ‚zweite‘ bestehen, erhalten die ‚Zweite‘ Wert

Wenn mehrere Zeilen für die gleiche ID und "Master" nicht existieren und "Second" nicht existiert und "Third" existiert, erhalten Sie den "Third" -Wert.

In meinem Beispiel so, würde ich nur extrahieren mag:

Id Type Value 
1 Master This is the first value 
2 Master Another one 
3 Second A new hope 
4 Second A single value 

Ich versuche, aufgeteilt in 3 verschiedenen Quellen und kommen oder Lookup, aber keine Parameter gefunden, die doppelte Zeile zu verwerfen.

Wie kann ich das tun?

Vielen Dank im Voraus, BR Xavier

Antwort

0

Versuchen Sie, sie durch einen Sortierer gestellt von ID dann Typ und schließlich durch eine aggregater Gruppierung von ID asc abst je nach Ihren Anforderungen (zum Glück Master kommt, bevor die zweite bestellen die kommt vor dem dritten alphabetisch)

+0

Hallo, Ihr Recht, ich werde es versuchen, einfacher als meine erste Lösung. Vielen Dank im Voraus, ich Feedback, wenn Sie mit meiner Art von Daten arbeiten. Grüße – Cascador84

+0

Und wenn Sie eine andere Art benötigen, können Sie es mit expression in einige Ganzzahlen konvertieren und dann sortieren. Z.B. DECODE (Typ, 'Master', 3, 'Third', 2, 'Second', 1) wählt Zweite, dann Third, dann Master. – Maciejg

+0

Hallo, vielen Dank, es funktioniert jetzt, wenn Agg min zum letzten ändern :) – Cascador84

0

Finden Sie die Abfrage, die in Informatica Map konvertiert werden kann.

create table test1 
(id integer, 
    type varchar2(100), 
    value varchar2(1000) 
); 

insert into test1 values (1,'Master','This is the first value'); 
insert into test1 values (1,'Second','This is a new value'); 
insert into test1 values (1,'Third','This is not a mandatory value'); 
insert into test1 values (2,'Master','This is the first value'); 
insert into test1 values (2,'Third','This is not a mandatory value'); 
insert into test1 values (3,'Second','This is the first value'); 
insert into test1 values (3,'Third','This is not a mandatory value'); 
insert into test1 values (4,'Second','mandatory value'); 
commit; 

select * from test1;  

From the below query "agg" part can be done in aggregator and decode function within aggregator transformation. 

Then use joiner to join agg part and actual table 

use filter to filter the required rows 

    with agg as 
    (select  max(case when type='Master' then 10 
       when type='Second' then 9 
       when type='Third' then 8 
       else 7 end) ms, 

      id 
     from test1 
    group by id 

) 
    select a.ms,b.* from agg a, test1 b 
     where a.id=b.id 
     and case when a.ms=10 then 'Master' 
       when a.ms=9 then 'Second' 
        when a.ms=8 then 'Third' 
        else 'noval2' 
        end =b.type; 
Verwandte Themen