Folgendes vereinfachtes Problem:
Tabelle1:
Spalten:
Baustein, Funktion (beide VARCHAR/VARCHAR2)
LfdNrA (integer)
Tabelle2:
Spalten:
Name (VARCHAR/VARCHAR2)
LfdNrB (integer)
LfdNrA (aus Tabelle 1)
-----------------------------------------------
Hier die
SQL:
SQL-Code:
for fkt_rec in (
select
Baustein,
LAG(Baustein, 1) over (order by Baustein, Funktion, Name) "PreBaustein",
Funktion,
LAG(Funktion, 1) over (order by Baustein, Funktion, Name) "PreFunktion",
Name
from
Tabelle1, Tabelle2
where
Tabelle1.LfdNrA = Tabelle2.LfdNrA
-- Das order by ist anders als in der LAG Funktion
order by
Baustein, Funktion, Name
) loop
if fkt_rec."PreBaustein" is null
then
dbms_output.put_line('--////////////////////////////////////////////////////////////////////////////////');
dbms_output.put_line('-- ' || fkt_rec.Baustein);
end if;
if fkt_rec.Baustein <> fkt_rec."PreBaustein"
then
dbms_output.put_line('');
dbms_output.put_line('--////////////////////////////////////////////////////////////////////////////////');
dbms_output.put_line('-- ' || fkt_rec.Baustein);
end if;
if fkt_rec.Funktion <> fkt_rec."PreFunktion" or fkt_rec."PreFunktion" is null
then
dbms_output.put_line('');
dbms_output.put_line('-- ' || fkt_rec.Funktion);
dbms_output.put_line('');
end if;
dbms_output.put_line(fkt_rec.Name);
end loop;
-----------------------------------------------
Es ist jetzt so das bei dem "großen" (letzten) order by die Sortierung anders ist als in den LAG Funktionen.
Beispiel: (Auszug)
Tabelle2.Name: test, test1, test2, test3, Test, Test1, TEst, TEst1, a, b, c, z, +a, +b
Die LAG Funktion sortiert so:
+a, +b, a, b, c, z, test, test1, test2, test3, Test, Test1, TEst, TEst1
Das "normale" order by:
a, b, c, test, Test, TEst, test1, Test1, TEst1, test2, test3, z, +a, +b
-----------------------------------------------
Lange Rede kurzer Sinn:
1. Muß ich das "große" order by einfügen weil die "Sortierung" das Daten mit der LAG Funktion ein Nebeneffekt ist?
2. Kann mir jemand sagen wie ich die Sortierung der LAG Funktion "gerichtigen" kann. (mit Lower() wird nur die Groß-/Kleinschreibung gelöst, aber nicht das Problem mit den Sonderzeichen)
Danke David