PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL/Durchnummerierung inkl. Text


AlSvartr
2006-04-27, 22:07:57
Hallo,

ich habe gerade ein kleines Problem mit folgender Aufgabe:

Die Bibliothek will eine neue Systematik für ihren Bestand einführen. Jedes Buch soll als Nummer durch die ersten drei Buchstaben des Autors und einer fortlaufenden Nummer 1,2,3,... bei gleichlautenden Autoren gekennzeichnet werden, also "Goe1", "Goe2" für die Goethe-Bücher, usw. Erstellen Sie eine Tabelle "Wechsel", in der zu jedem Buch dessen alte Buch-Nummer BNr und die neue Signatur steht. Reichen Sie als Lösung einen einzigen SQL-Befehl ein. (D.h. eine Sequenz von INSERT-Anweisungen ist hier keine Lösung.)

So weit bin ich:
CREATE TABLE Wechsel
AS (SELECT bnr,substring(autor,1,3) FROM buecher2 ORDER BY autor)

Aber mir will sich absolut nicht erschließen, wie ich hier - und vor allem für jeden Autor einzeln - eine solche Signatur erstellen kann bzw. eben diese für jeden Autor neu durchlaufende Sequenz mit reinkriege. Hat da jemand nen entscheidenden Tipp für mich? Wäre wirklich sehr nett.

Gast
2006-04-27, 22:20:45
Zählt auch PL/SQL oder Oracle-spefizische SQL-Erweiterungen? Wieso so gehen soll wüsst ich nicht…

AlSvartr
2006-04-27, 22:24:17
Geht in diesem Fall um PostgreSQL..hätte ich noch dazuschreiben sollen ;)

AlSvartr
2006-04-30, 03:32:37
Problem hat sich erledigt..ein einfaches CASE Konstrukt hat's getan ;)

Gast
2006-04-30, 17:42:38
AlSvartr[/POST]']Problem hat sich erledigt..ein einfaches CASE Konstrukt hat's getan ;)
SQL cann Case? bitte Lösung!

AlSvartr
2006-04-30, 18:37:53
Zumindest Postgres kanns..

CREATE TABLE Wechsel AS (
SELECT bnr,
CASE
WHEN autor IS NULL THEN (SELECT COUNT(*) FROM buecher2 WHERE buecher2.autor IS NULL AND buecher2.bnr<=b.bnr)::text
ELSE substring(autor,1,3)||(SELECT COUNT(*) FROM buecher2 WHERE buecher2.autor=b.autor AND buecher2.bnr<=b.bnr)
END
as signatur
FROM buecher2 b GROUP BY b.bnr,b.autor ORDER BY autor)

(Das ORDER BY hätte ich mir wohl auch sparen können..)

MeLLe
2006-05-01, 14:00:33
Schicke Sache, AlS =)

icemanemp
2006-05-02, 10:41:38
Gast[/POST]']SQL cann Case? bitte Lösung!
Kann Oracle/MSSQL auch auf jeden Fall (bei uns im Einsatz 9i und 2000). Ob das SQL-99 o.ä. konform ist weiss ich nicht. Ob SQL-99 von den Herstellern immer 100% implementiert wird ist auch wieder so ne Sache. (Siehe Oracle 8i und Join mit (+) usw. da gibt es kein Befehl "left outer join")