Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#2

AW: Oracle LAG/LEAD Funktion falsche Sortierung?

  Alt 12. Okt 2010, 14:01
Jetzt hab ich das Problem gelöst:

SQL-Code:
for fkt_rec in (
select
  Baustein,
  LAG(Baustein, 1) over (order by rownum) "PreBaustein",
  Funktion,
  LAG(Funktion, 1) over (order by rownum) "PreFunktion",
  Name,
  rownum
from
  (select
     Baustein,
     Funktion,
     Name,
     rownum
   from
     Tabelle1, Tabelle2
   where
     Tabelle1.LfdNrA = Tabelle2.LfdNrA
   order by
     Baustein, Funktion, Name, rownum)
order by
  rownum
) 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;
Im Subselect wird einmalig und richtig die Sortierung festgelegt und kann somit von der LAG Funktion nicht mehr durcheinander gebracht werden.

Geändert von mkinzler (12. Okt 2010 um 14:03 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat