Toon posts:

[Oracle] speciale sortering in pl/sql *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag mensen,

Ik heb het volgende probleem, dat ik niet direct kan opzoeken in google.
En waar ik al een tijdje aan bezig zit. Maar ik zou het toch wel nodig hebben.

Ik heb de volgende situatie:

Lijnnr Compno
10 A
20
30 B
40 A
50 A
60 B
70 A

Deze gegevens haal ik op in een cursor die ik dan naar een tabel schrijf.

Maar dan moet het in de volgende volgorde afgedrukt worden:

Lijnnr Compno
10 A
40 A
50 A
70 A
20
30 B
60 B

En dus weer in een tabel komen of direct in een cursor voor te zenden naar crystal reports.

Ik ben echt teneinde raad, want mijn sql (oracle) kennis reikt niet ver genoeg.

Alvast bedankt (hopelijk is mijn titel goed en staat de topic op zijn plaats)

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 08-05 21:30

mkleinman

8kWp, WPB, ELGA 6

Ik heb even snel een simpele tabel aangemaakt zoals jij boven beschreven hebt.

code:
1
2
3
4
5
SELECT lijnnr, compno
  FROM bla
 ORDER 
    BY DECODE ( compno, 'A',1, DECODE( compno, NULL, 2 ) ), 
       lijnnr;


Deze query levert exact je resultaat.

[ Voor 90% gewijzigd door mkleinman op 12-04-2005 17:08 . Reden: uitbreiding datamodel / query ]

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Verwijderd

Topicstarter
Ja ok, maar het A, B kunnen eigenlijk ontzettend verschillende zaken zijn.

Een voorbeeld van een compno : 154778012

Dus ik kan niet op voorhand zeggen een decode(compno , 'bepaalde waarde', ...)

Verwijderd

Topicstarter
Dus er kunnen evengoed 10-20 + verschillende componenten inzitten.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als er verschillende waarden kunnen zijn, waar wil je dan die null hebben?
Nu staat ie tussen a en b, maar als er ook c en d zijn, waar dan?

Who is John Galt?


Verwijderd

Topicstarter
De lijnen per groepering uitvoerende afdeling/uitvoerder --> dit lukt

worden op een speciale manier gesorteerd op lijnnr en componentno

Eerst wordt het laagste lijnnr afgedrukt, indien dit een componentno heeft dan worden verder alle andere lijnen afgedrukt volgens lijnnr die hetzelfde componentno hebben. Indien dit geen componentno heeft dan worden verder alle andere lijnen afgedrukt die ook geen componentno hebben.

Vervolgens wordt het eerstvolgende lijnnr (dat nog niet afgedrukt is) afgedrukt. Indien dit terug een componentno heeft dan worden nadien alle lijnen afgedrukt die hetzelfde componentno hebben, indien dit geen componentno heeft dan worden verder alle andere lijnen afgedrukt die ook geen componentno hebben.
enz.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select got.compno
,      got.lijnnr 
from   ( select compno
         ,      minlijn
         ,      rownum rn 
         from   ( select compno
                  ,      min (lijnnr) minlijn 
                  from   got 
                  group by compno 
                  order by 2
                )
       ) vw
,      got 
where  nvl(got.compno,'-') = nvl(vw.compno,'-') 
order by vw.rn
,     got.lijnnr

Who is John Galt?


Verwijderd

Deze lijst
code:
1
2
3
4
5
6
7
8
9
10
11
12
Lijnnr Compno
10 A
20
25
30 B
40 A
50 A
60 B
62
64
70 A
80 C


wordt deze gesorteerd als lijst 1
code:
1
2
3
4
5
6
7
8
9
10
11
12
Lijnnr Compno
10 A
40 A
50 A
70 A
20
25
30 B
60 B
62
64
80 C

of als lijst 2
code:
1
2
3
4
5
6
7
8
9
10
11
12
Lijnnr Compno
10 A
40 A
50 A
70 A
20
25
62
64
30 B
60 B
80 C


Als het lijst 2 is lijkt het me mogelijk om dit in 1 SQL statement te schrijven, maar is het lijst 1 dan zal je, zoals je het in je TopicTitel al aangeeft, het in PL/SQL moeten schrijven
Pagina: 1