2016-06-12 5 views
0

Ich habe eine Datei im folgenden Format namens BAIMTHP in unserer Bibliothek.Datenextraktion DB2

Ich will nur die Linien verwandten 50K extrahieren (für TEF_NO 12345, ROW_ # 3, 4 & 5 Für TEF_NO 56789, ROW_ # 1, 2, 3 & 4). Problem ist, dass das TAG-Feld nicht für alle Zeilen gefüllt wird, stattdessen wird die ROW_ # auffüllen. Ich habe versucht, die folgende SQL, aber ich konnte nur die erste Zeile des Tags Feld extrahieren. In diesem Fall nur ROW_ # 1 und 3 (für TEF_NO = 56789 & TEF_NO = 12345).

Gibt es eine Möglichkeit, dies in DB2 zu tun? TAG 50K füllt nur maximal 4 Zeilen.

CREATE TABLE QTEMP. TEST AS (SELECT * FROM EMOQRYLIB.BAIMTHP WHERE TAG = '50K') 

Da Bilder nicht erlaubt sind für mein Profil zu laden, musste ich die Beispieldatei Details über

TEF_NO  TAG   ROW_#  TEXT 
12345   20K   1    XXXXXX 
12345   25K   2    XXXXXX 
12345   50K   3    29/1 
12345       4    Ahamath Lane 
12345       5    Colombo 
56789   50K   1    No 11 
56789       2    17th Lane 
56789       3    Colpitty 
56789       4    Colombo 
56789   57A   5    XXXXXX 
56789   52B   6    XXXXXX 

IDEAL OUTPUT

TEF_NO  TAG   ROW_#  TEXT 
12345   50K   3    29/1 
12345       4    Ahamath Lane 
12345       5    Colombo 
56789   50K   1    No 11 
56789       2    17th Lane 
56789       3    Colpitty 
56789       4    Colombo 

Antwort

0

Ihre Frage nicht klar geben ist die Logik - wenn das TAG-Feld erst nach einer 50K-Zeile NULL ist - aber folgende SQL würde den Job erledigen (in meinem Fall den Tabellennamen t50):

select tef_no, tag, row_#, text 
    from t50 t 
where tef_no in (select tef_no from t50 where tag = '50K') 
    and row_# >= (select row_# from t50 where tag = '50K' and tef_no= t.tef_no) 
    and row_# < (select row_# from t50 where tag = '50K' and tef_no= t.tef_no) + 4 
+0

Funktioniert perfekt. Vielen Dank für die Lösung ..... –