Announcement

Collapse
No announcement yet.

Werte als Spaltennamen in Select

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

  • Werte als Spaltennamen in Select

    Hi.

    Bin leider ziemlich unerfahren in SQL - ich vermute, mein Problem ist recht einfach zu lösen, und vielleicht kann mir jemand sagen, wie?

    Ich möchte in einer Tabelle Temperaturwerte mehrerer Sensoren speichern, dazu benutze ich folgende Tabelle:

    time | sens | temp
    -------+------+------
    10:10 | A | 10
    10:10 | B | 12
    10:11 | A | 11
    10:11 | B | 12

    Jetzt suche ich eine Select-Anweisung, die mir die Sensoren als Spaltennamen, und die Temperatur als Wert liefert, also so:

    time | A | B
    -------+----+----
    10:10 | 10 | 12
    10:11 | 11 | 12

    Leider komme ich nicht drauf, wie das gehen soll... ich bitte um Hilfe!

    Danke, Fressnapf

  • #2
    Das nennt sich Pivotfunktion und richtet nach der verwendeten DB
    Christian

    Comment


    • #3
      Hallo Christian.
      Ich benutze MySQL. Eine Suche nach Pivotfunktion fördert doch recht komplexe Beispiele zu Tage. Ich muss da mal mit rumspielen... sieht schwierig aus...

      Danke, Fressnapf

      Comment


      • #4
        Kann sein, dass es pivot für mysql (immer noch) nicht gibt. Was Du findest sind wahrscheinlich workarounds mit Case..When.
        Sieht komplex aus, folgt aber einem einfachen Muster.
        Für jede Pivot Spalte:
        - Wenn <KategorieWert> = <bestimmterWert>, dann <zählbarenWert> ausgeben, sonst 0, nicht, oder auch den Sonst Fall weglassen und Pivotspaltennamen vergeben.
        - Für alle <KategorieWert> wiederholen.
        Das Ganze kann man noch etwas variieren. Oder erstmal an einem einfach Beispiel ausprobieren. Beispiele für dieses Verfahren dürfte es reichlich geben.
        Gruß, defo

        Comment


        • #5
          Naja, so komplex sieht es nicht aus....Erklärung und sogar in D

          https://www.delftstack.com/de/howto/...able-in-mysql/

          Christian

          Comment


          • #6
            Wenn Du eine feste Anzahl von Sensoren hast, kannst Du die Abfrage auch ohne Pivot Statement erfragen. In etwa
            select time, sum(vA), sum(vB) from (
            select time, temp vA, 0 vB
            union all
            select time, 0 vA, temp vB
            ) q1
            group by time

            *Hinweis* time ist ein schlechter Attributname, weil es in den meisten SQL-Varianten ein Keywort ist

            Comment

            Working...
            X