Generierung von laufender nummer anhand von Sortierungskategorie

Hallo Leute ich hoffe ihr könnt mir wegen meinem Problem helfen.

Es gibt 2 SortiermodiEine Sortierung nach Buchnummer, dann Seitenbezeichnung, dann Menge, wenn Kategorie = 1. Die Nr soll dem Benutzer generiert werden.

[font=Courier New]Beispiel Kathegorie 1 BuchView
========

Nr  Buchnummer     Seitenbezeichnung Menge Kategorie
1   AAAA           1#2               2     1
2   AAAA           1#3[/font][font=Courier New]               3[/font][font=Courier New]     1
3   AAAA           1#4               [/font][font=Courier New]3[/font][font=Courier New]     1
4   BBBB           1#7               [/font][font=Courier New]2[/font][font=Courier New]     1
5   BBBB           1#5               [/font][font=Courier New]5[/font][font=Courier New]     1
6   CCCC           1#8               [/font][font=Courier New]2     [/font][font=Courier New]1
7   CCCC           1#6               [/font][font=Courier New]7[/font][font=Courier New]     1[/font]

und eine Sortierung nach Menge, dann Buchnummer, dann Seitenbezeichnung, wenn Kategorie = 2

[font=Courier New]Beispiel Kathegorie 2[/font][font=Courier New] BuchView
========

[/font] [font=Courier New]Nr   [/font][font=Courier New]Buchnummer     [/font][font=Courier New]Seitenbezeichnung [/font][font=Courier New]Menge Kathegorie[/font][font=Courier New]
1    [/font][font=Courier New]EEEE[/font][font=Courier New]           1#2[/font][font=Courier New]               2[/font][font=Courier New]     2
2    FFFF           [/font][font=Courier New]1#7[/font][font=Courier New]               2    [/font][font=Courier New] 2
3    GGGG           1#8              [/font][font=Courier New] 2[/font][font=Courier New]     2
4    EEEE           [/font][font=Courier New]1#3[/font][font=Courier New]               3[/font][font=Courier New]     2
5    EEEE           [/font][font=Courier New]1#4[/font][font=Courier New]               3     [/font][font=Courier New]2
6    FFFF          [/font][font=Courier New] 1#5[/font][font=Courier New]               5[/font][font=Courier New]     2
7    GGGG           [/font][font=Courier New]1#6[/font][font=Courier New]               7[/font][font=Courier New]     2[/font]

Diese Sortierungen sollen in der View kombiniert und die Generierte Nr, welche abhängig von der Soriertung ist angezeigt werden:

[font=Courier New] BuchView
========
[/font][font=Courier New]
Nr   Buchnummer     Seitenbezeichnung Menge Kategorie
1    AAAA[/font][font=Courier New]           1#2[/font][font=Courier New]               2[/font][font=Courier New]     1
2    AAAA           [/font][font=Courier New]1#3               [/font][font=Courier New]3[/font][font=Courier New]     1
3    AAAA           [/font][font=Courier New]1#4              [/font][font=Courier New] 3[/font][font=Courier New]     1
4    BBBB           [/font][font=Courier New]1#7               [/font][font=Courier New]2     [/font][font=Courier New]1
5    BBBB           [/font][font=Courier New]1#5               [/font][font=Courier New]5[/font][font=Courier New]     1
6    CCCC           [/font][font=Courier New]1#8               [/font][font=Courier New]2[/font][font=Courier New]     1
7    CCCC           [/font][font=Courier New]1#6               [/font][font=Courier New]7[/font][font=Courier New]     1[/font][font=Courier New]
1    EEEE           [/font][font=Courier New]1#2               [/font][font=Courier New]2[/font][font=Courier New]     2
2    FFFF           [/font][font=Courier New]1#7               [/font][font=Courier New]2[/font][font=Courier New]     2
3    GGGG           [/font][font=Courier New]1#8               [/font][font=Courier New]2[/font][font=Courier New]     2
4    EEEE           [/font][font=Courier New]1#3              [/font][font=Courier New] 3[/font][font=Courier New]     2
5    EEEE           [/font][font=Courier New]1#4               [/font][font=Courier New]3[/font][font=Courier New]     2
6    FFFF           [/font][font=Courier New]1#5               [/font][font=Courier New]5[/font][font=Courier New]     2
7    GGGG           [/font][font=Courier New]1#6[/font][font=Courier New]               7[/font][font=Courier New]     2[/font]

Für jede der Sortierungen wird eine laufende Nummer(“Nr”-Spalte) in der Buchview generiert. Wie mache ich das?

Ich würd schon gern helfen, versteh aber Dein Problem nicht…
Ist auch schwer lesbar, es gibt hier so Formatierungsdinger wie CODE, wo man das in lesbar machen könnte.
In Deinen Tabellen ist nicht richtig klar, was was sein soll…

Es gibt ORDER BY, hilft Dir das weiter?

Andreas

Ok ich habe das ganze jetzt mal im Kopf aktualisiert.

Entweder Du nimmst eine Sequence zu Hilfe oder baust Dir eine SRF.

test=*# select * from foo order by val;
         ts          | val
---------------------+-----
 2007-01-01 10:00:00 |  10
 2007-01-01 11:00:00 |  15
 2007-01-01 10:00:01 |  20
(3 rows)

test=*# select nextval('foo_s'), bar.* from (select * from foo order by val) as bar;
 nextval |         ts          | val
---------+---------------------+-----
       1 | 2007-01-01 10:00:00 |  10
       2 | 2007-01-01 11:00:00 |  15
       3 | 2007-01-01 10:00:01 |  20
(3 rows)

SRF zu zeigen hab ich grad keine Zeit…
(steht aber in der Doku)

Andreas

Als SRF:

test=# create or replace function foo_sort(out id int, out ts timestamp, out val int) returns setof record as $$declare i int;r record;begin i:=1; for r in select * from foo order by val loop id:=i;ts:=r.ts;val:=r.val; i:=i+1; return next; end loop; end; $$language plpgsql;
CREATE FUNCTION
Time: 2.431 ms
test=*# select * from foo_sort();
 id |         ts          | val
----+---------------------+-----
  1 | 2007-01-01 10:00:00 |  10
  2 | 2007-01-01 10:00:01 |  20
  3 | 2007-01-01 11:00:00 |  15
(3 rows)

Schneller Hack, Prinzip sollte erkennbar sein. Schreib halt 2 Funktionen für Deine beiden Sortierwünsche. Du kannst die SRF auch als IMMUTABLE markieren, das noch als Hinweis.

Andreas

@akretschmer

Danke dir. Ich habs mit den UNION ALL hingekriegt. Ich muss dann nur noch in meiner Anwendung durchnummerieren, was bei meinem Objectmapping nicht so wild ist.