Sie könnten den Brute-Force-Ansatz mit einer Tabelle ausführen, die Sie schrittweise füllen. Angenommen, Ihre test
Tabelle sieht etwa so aus:
create table test (tablename varchar2(9), columnvalue varchar2(11), rankofcolumn number);
dann die result
Tabelle kann erstellt werden:
create table result (tablename varchar2(9), columnvalue varchar2(11), rankofcolumn number,
path varchar2(50));
Dann erstellen die Ergebniseinträge für den niedrigsten Rang:
insert into result (tablename, columnvalue, rankofcolumn, path)
select t.tablename, t.columnvalue, t.rankofcolumn, t.columnvalue
from test t
where t.rankofcolumn = 1;
3 rows inserted.
Und immer wieder Fügen Sie Zeilen hinzu, die auf dem höchsten vorhandenen Rang aufbauen und erhalten die folgenden Werte (wenn es dafür tablename
gibt) von th e test
Tabelle:
insert into result (tablename, columnvalue, rankofcolumn, path)
select t.tablename, t.columnvalue, t.rankofcolumn,
concat(concat(r.path, '->'), t.columnvalue)
from test t
join result r
on r.tablename = t.tablename
and r.rankofcolumn = t.rankofcolumn - 1
where t.rankofcolumn = 2;
3 rows inserted.
insert into result (tablename, columnvalue, rankofcolumn, path)
select t.tablename, t.columnvalue, t.rankofcolumn,
concat(concat(r.path, '->'), t.columnvalue)
from test t
join result r
on r.tablename = t.tablename
and r.rankofcolumn = t.rankofcolumn - 1
where t.rankofcolumn = 3;
2 rows inserted.
insert into result (tablename, columnvalue, rankofcolumn, path)
select t.tablename, t.columnvalue, t.rankofcolumn,
concat(concat(r.path, '->'), t.columnvalue)
from test t
join result r
on r.tablename = t.tablename
and r.rankofcolumn = t.rankofcolumn - 1
where t.rankofcolumn = 4;
1 row inserted.
Und halten Sie für die maximal mögliche Anzahl der Spalten gehen (d höchste rankofcolumn
für jede Tabelle). Sie können dies prozedural in WX2 tun, indem Sie so lange iterieren, bis Nullzeilen eingefügt werden. aber du hast es ziemlich begrenzt klingen lassen.
Nach all den Wiederholungen der Tabelle jetzt enthält:
select * from result
order by tablename, rankofcolumn;
TABLENAME COLUMNVALUE RANKOFCOLUMN PATH
--------- ----------- ------------ --------------------------------------------------
A C1 1 C1
A C2 2 C1->C2
A C3 3 C1->C2->C3
A C4 4 C1->C2->C3->C4
B CX1 1 CX1
B CX2 2 CX1->CX2
C CY1 1 CY1
C CY2 2 CY1->CY2
C CY3 3 CY1->CY2->CY3
in Oracle getestet, aber versuchen, etwas Oracle-spezifischen zu vermeiden; könnte für WX2 natürlich optimieren müssen.
WX2 wird nicht die CTE erleichtern oder Sie fragen eine andere Lösung für diese Ausgabe – mohan111
In der vorherigen Frage haben Sie gesagt, dass Zwischentabellen erlaubt waren; ist das immer noch in Ordnung? –
@AlexPoole Ja. Wir können Zwischentabellen oder Ansichten haben. – SriniV