Till: SQL - Zeilen/Spalten vertauschen

Hallo in die Runde,

ich habe ein kleines SQL-Problem, bei dem ich Hilfe gebrauchen könnte. Ich habe mir die Frage schon oft gestellt - hatte glaube ich auch schon eine Lösung (mit PL/SQL), auf die ich jetzt aber nicht mehr kommen ...

Ich möchte per Abfrage in einer Tabelle zeilenweise stehende Einträge als Spalten anzeigen lassen. Hier das zugehörige Beispiel:

pseudoID  |  Klasse  |  Flaeche
-------------------------------
001       |  1       |  100
001       |  2       |  50
001       |  3       |  200
002       |  2       |  200
002       |  3       |  100
...

soll dargestellt (in neue Tabelle exportiert) werden als:

ID  |  Klasse_1  |  Klasse_2  |  Klasse_3
-----------------------------------------
001 |  100       |  50        |  200
002 |  0         |  200       |  100
...

um schließlich daraus abzuleiten:

ID  |  Klasse_1  |  Klasse_1proz  |  Klasse_2 ...
-------------------------------------------------
001 |  100       |  40 [sind %]   |  50
002 |  0         |  0             |  200
...

Vorschläge auch nur zu Teillösungen sind natürlich willkommen!

Übrigens: Ich benutze z.Zt. (leider!) *MS-Access* 2003 ...

Vielen Dank,
Till

  1. Hallo

    pseudoID  |  Klasse  |  Flaeche

    001       |  1       |  100
    001       |  2       |  50
    001       |  3       |  200
    002       |  2       |  200
    002       |  3       |  100
    ...

    soll dargestellt (in neue Tabelle exportiert) werden als:

    ID  |  Klasse_1  |  Klasse_2  |  Klasse_3

    001 |  100       |  50        |  200
    002 |  0         |  200       |  100
    ...
    Übrigens: Ich benutze z.Zt. (leider!) *MS-Access* 2003 ...

    Was heisst hier leider? Du hast Glück - und das meine ich ernst.
    Jet-SQL, der SQL-Dialekt von MS Access unterstützt schon seit Ewigkeiten Kreuztabellenabfragen. Damit sollte sich Dein Problem lösen lassen. Bei den meisten anderen SQL-Dialekten wirst Du basteln müssen.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      Jet-SQL, der SQL-Dialekt von MS Access unterstützt schon seit Ewigkeiten Kreuztabellenabfragen. Damit sollte sich Dein Problem lösen lassen. Bei den meisten anderen SQL-Dialekten wirst Du basteln müssen.

      MERCI!!! Funktioniert super ... Der kleine Hinweis hat mir viel Zeit erspart!

      Was heisst hier leider? Du hast Glück - und das meine ich ernst.

      Naja, wenn man mal mit Oracle gearbeitet hat, dann erscheint MS Access als Datenbank so geeignet wie MS Word zum Layouten. ;) Aber in diesem Fall ist es wohl tatsächlich ein Glücksfall! Und ich möchte hier bitte keine Grundsatz-Diskussion über Datenbanksysteme vom Zaun brechen ... ;)

      Viele Grüße,
      Till

      1. moin,

        Jet-SQL, der SQL-Dialekt von MS Access unterstützt schon seit Ewigkeiten Kreuztabellenabfragen. Damit sollte sich Dein Problem lösen lassen. Bei den meisten anderen SQL-Dialekten wirst Du basteln müssen.

        [..]ich möchte hier bitte keine Grundsatz-Diskussion über Datenbanksysteme vom Zaun brechen ... ;)

        Ich will da auch nicht weiter reinreden, aber wenn es das RDMS nicht hergibt: Kreuztabellen (gelegentlich auch als Pivottabellen bezeichnet) lassen sich ganz hervorragend mit zweidimensionalen hashes erstellen, z.B. in PERL, also innerhalb eines Scripts was das Ergebnis einer DB-Query weiterverarbeitet.

        --roro

      2. Hallo Till,

        Naja, wenn man mal mit Oracle gearbeitet hat, ...

        Für Oracle gibts in solchen Fällen Ask Tom und dort dann
        Pivot Query oder auch Pivoting a result set

        Grüße
        Marcus

        --
        si vis pacem, para iustitiam