Announcement

Collapse
No announcement yet.

Pivot Tabelle mit zwei Wertespalten

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

  • Pivot Tabelle mit zwei Wertespalten

    Hallo,
    eine einfache Pivot-Tabelle habe ich erstellt. Nun habe ich aber das Problem, dass diese Tabelle zwei unterschiedliche Werte-Spalten besitzen soll.
    Meine Tabelle Stellt eine Auflistung verschiedener Einzelteile dar welche in unterschiedlichen Artikeln verbaut sein kann:

    Teilenr, Artikel_1, Bezeichnung_1, Artikel_2, Bezeichnung_2, Artikel_3, Bezeichnung_3 ...

    123, A, Bremse, B, Beleuchtung, X, Kupplung
    789, M, Getriebe, X, Kupplung, Z, ABS

    Weiß da jemand wie man so etwas realisiert?

    Gruß
    Gerald

  • #2
    Was meinst Du mit "einfache Pivottabelle erstellt"?
    Pivottabellen sind aus SQL Perspektive das Ergebnis einer Pivot Abfrage.
    Pivotabfragen unter SQL sind zwar bei neueren Systemen möglich, aber doch letztlich recht statisch, weil die Spalten fest angegeben und entsprechend gefiltert werden müssen.
    In Deinem Fall Artikel1-3 und ebenso Bezeichnung.

    Kannst Du vlt genauer beschreiben, was Du vorhast?
    Gruß, defo

    Comment


    • #3
      Hallo,
      also meine einfache Pivotabfrage sieht so aus:
      Code:
      Select * from
      (SELECT distinct Teilenr, ROW_NUMBER() over(Partition by Teilenr order by Teilenr) as Rnk, Artikel
        FROM (Select DISTINCT Artikel, Teilenr from MyTable) STL ) a
      PIVOT
      (
      max(Artikel)
      for Rnk IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30])
      )bla
      Und nun soll eine weitere Wertespalte zum Artikel (seine Bezeichnung) hinzukommen.

      Gruß
      Gerald

      Comment


      • #4
        Du kannst die Pivot Clause für/über eine weitere Spalte wiederholen.
        Gruß, defo

        Comment


        • #5
          Hallo defo,
          vielen Dank für deinen Tip. Das funktioniert auch fast. Nur erzeugt er mir nun für jede Spalte mit Werten eine neue Zeile und lässt dann die anderen Spalten leer.

          Code:
          Select * from
          (SELECT distinct Teilenr, ROW_NUMBER() over(Partition by Teilenr order by Teilenr) as Rnk_Art,
              'BEZ' + cast(ROW_NUMBER() over(Partition by Teilenr order by Teilenr) as nvarchar) as Rnk_BEZ, Artikel, Art_Bez
            FROM (Select DISTINCT Artikel, Teilenr from MyTable) STL ) a
          PIVOT
          (
          max(Artikel)
          for Rnk_Art IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30])
          )Pv_1
          PIVOT
          (
          max(Art_Bez)
          for Rnk_Art IN ([BEZ1],[BEZ2],[BEZ3],[BEZ4],[BEZ5],[BEZ6],[BEZ7],[BEZ8],[BEZ9],[BEZ10],[BEZ11],[BEZ12],[BEZ13],[BEZ14],[BEZ15],
          	[BEZ16],[BEZ17],[BEZ18],[BEZ19],[BEZ20],[BEZ21],[BEZ22],[BEZ23],[BEZ24],[BEZ25],[BEZ26],[BEZ27],[BEZ28],[BEZ29],[BEZ30])
          )Pv_2
          Da scheint noch irgend etwas zu fehlen???
          Gruß
          Gerald

          Comment


          • #6
            Mmh, so hatte ich mir das nicht vorgestellt, schau mal hier, da hat jemand ein ähnliches Problem. Ich kann das im Kopf schwer nachvollziehen. Hab kein sql server. Die Lösung unten ist für Oracle, aber MS ist mit der letzten Version ja schon bei sehr vielen Funktionen nachgezogen.

            Problem SO
            http://stackoverflow.com/questions/1...ng-two-columns

            Lösung sqlfiddle
            http://sqlfiddle.com/#!4/0ccfc/21
            Gruß, defo

            Comment


            • #7
              Hallo defo,
              so direkt geht es beim SQL-Server leider nicht.
              Aber ich hab jetzt eine funktionierende Lösung gefunden. Es hat die Group by Clause gefehlt:
              Code:
              Select Teilenr, max([1]) as [1], max(BEZ1) as BEZ1, max([2]) as [2], max(BEZ2) as BEZ2, max([3]) as [3], max(BEZ3) as Bez3, ... from
              (SELECT distinct Teilenr, ROW_NUMBER() over(Partition by Teilenr order by Teilenr) as Rnk_Art,
                  'BEZ' + cast(ROW_NUMBER() over(Partition by Teilenr order by Teilenr) as nvarchar) as Rnk_BEZ, Artikel, Art_Bez
                FROM (Select DISTINCT Artikel, Teilenr from MyTable) STL ) a
              PIVOT
              (
              max(Artikel)
              for Rnk_Art IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30])
              )Pv_1
              PIVOT
              (
              max(Art_Bez)
              for Rnk_Art IN ([BEZ1],[BEZ2],[BEZ3],[BEZ4],[BEZ5],[BEZ6],[BEZ7],[BEZ8],[BEZ9],[BEZ10],[BEZ11],[BEZ12],[BEZ13],[BEZ14],[BEZ15],
              	[BEZ16],[BEZ17],[BEZ18],[BEZ19],[BEZ20],[BEZ21],[BEZ22],[BEZ23],[BEZ24],[BEZ25],[BEZ26],[BEZ27],[BEZ28],[BEZ29],[BEZ30])
              )Pv_2
              Group by Teilenr

              Comment

              Working...
              X