Announcement

Collapse
No announcement yet.

Mehrere Zeilen auf Spalten verteilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere Zeilen auf Spalten verteilen

    Hallo zusammen,

    ich bin blutiger Oracle-Anfänger und wusste nicht genau nach welchen Stichworten ich zu diesem Thema suchen soll, aber vielleicht kann mir jemand weiterhelfen:

    Nehmen wir an ich hätte eine Tabelle der Form:

    ProduktID;ProduktName;AttributName;AttributWert
    001;Messer;Klinge;Edelstahl
    001;Messer;Griff;Holz, schwarz
    001;Messer;Preis_DE;5,99
    001;Messer;Preis_AT;6,99
    001:Messer;Preis_CH;8,95
    002;Gabel;Griff;Plastik, weiss
    002;Gabel;Preis_DE;3,99
    002;Gabel;Preis_AT;4,59
    002:Gabel;Preis_CH;6,95
    usw...

    Nun möchte ich die Zeilen zusammenfassen, damit ich eine Tabelle dieser Form erhalte:

    ProduktID;ProduktName;Griff;Preis_DE;Preis_CH
    001;Messer;Holz, schwarz;5,99;8,95
    002;Gabel;Plastik, weiss;3,99;6,95

    Ich möchte also die Zeilen nach der ProduktID gruppieren einige der Attribute anhand des Attributsnamens in Spalten verteilen.
    Ich denke das geht nicht so einfach, aber vielleicht kann mir ja jemand dabei helfen?

    Viele Grüße,
    Christof

  • #2
    Sind die Einträge beliebig oder sind es immer nur diese 5? Komplett dynamisch geht es kurz gesagt nicht. Das wäre eine Transposition der Tabelle.

    Verwendest Du eigentlich zusammengesetzte PKs? Falls das was neues ist würde ich Dir raten auf eindeutige IDs zu gehen.

    Comment


    • #3
      Die PKs sind eindeutig (ProduktID). Ich lese die Tabellen nur aus der DB aus und habe keinen Einfluss auf den Aufbau, da ich nicht der Entwickler bin. Brauche nur Daten für Reports/Exporte...

      Es sind nicht immer 5 Einträge, aber die die ich will kann ich immer eindeutig benennen (z.B. Preis_CH oder Preis_DE)
      Ich brauche eben eine Tabelle in der nur die Werte, die ich vergleichen will, nebeneinander stehen.

      Comment


      • #4
        Wenn Du nicht der Entwickler bist warum machst Du dann ein SQL Kommando? Wofür brauchst Du die denn? Ich würde die so in der Programmiersprache Deiner Wahl aufbereiten. Dort geht das wesentlich einfacher als in SQL.

        Ansonsten:

        [highlight=sql]
        SELECT ProduktID, ProduktName,
        (
        SELECT pgriff.AttributWert
        FROM Produkte pgriff
        WHERE pgriff.AttributName = 'Griff'
        AND pgriff.ProduktID = pmain.ProduktID
        ) as griff,
        (
        SELECT ppreisde.AttributWert
        FROM Produkte ppreisde
        WHERE ppreisde.AttributName = 'Preis_DE'
        AND ppreisde.ProduktID = pmain.ProduktID
        ) as Preis_DE
        FROM Produkte pmain
        GROUP BY ProduktID, ProduktName
        [/highlight]

        Aber dafür musst Du natürlich alle AttributNamen auflisten

        P.S.: Stehen jetzt natürlich nicht alle Spalten drin. Aber ich denke das System ist verständlich

        Comment


        • #5
          Ich mache das immer so:

          Code:
          SELECT produktid
                ,produktname
                ,MAX(DECODE(attname,'Griff',attwert)) Griff
                ,MAX(DECODE(attname,'Preis_DE',attwert)) Preis_DE
                ,MAX(DECODE(attname,'Preis_CH',attwert)) Preis_CH
          FROM daten
          GROUP BY produktid,produktname
          ORDER BY produktid;
          Gruß

          Ralf

          Comment

          Working...
          X