Announcement

Collapse
No announcement yet.

Ergebnis in einer Zeile und mehreren Spalten ausgeben

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

  • Ergebnis in einer Zeile und mehreren Spalten ausgeben

    Hallo zusammen,

    der Titel klingt vielleicht profan nur ich kann es grad nicht besser zusammen fassen und mir fehlt der entscheidende Hinweis.
    Ausgangspunkt ist eine Tabelle mit den Spalten znr,typ,value,date.
    Im Ergebnis erwarte ich pro Datum eine Zeile mit zwei verschiedenen Value Spalten.
    Folgender Code kommt meinem erwünschtem Ergebnis am nächsten :
    Code:
    SELECT typ, date, if(znr=185, value,NULL) Waerme,
                      if(znr=166, value,NULL) Strom
    FROM zw
    WHERE znr IN (185,166)
           AND typ =1
      AND date BETWEEN '2016-04-01' AND '2016-04-03' order by date
    Im Ergebnis bekomme ich leider
    typ date Waerme Strom
    1 2016-04-01 NULL 1234
    1 2016-04-02 NULL 5678
    1 2016-04-03 NULL 9101
    1 2016-04-01 2345 NULL
    1 2016-04-02 6789 NULL
    1 2016-04-03 1023 NULL
    Ich habe schon mit "union" und "join" gekämpft aber ohne Erfolg.

    Vielleicht bin ich ja auch total auf dem Holzweg. Ich hoffe ihr könnt mir helfen.
    Vielen Dank im vorraus.
    Zuletzt editiert von Bulli; 13.04.2016, 16:12.
    Gruß Bulli

  • #2
    das kann man leider nicht sicher beantworten, weil die Ausgangsstruktur zwar genannt wird, aber nicht, wieviel Werte wie vorkommen.
    Ein Versuch:
    Mach ein Group By nach typ, date darunter und nehme im Select Max(Strom), Max(Wärme)

    Es gibt andere Möglichkeiten, die vielleicht effizienter sind.
    Gruß, defo

    Comment


    • #3
      Hallo,

      hier ein Auszug meiner Rohtabelle

      ZNR Typ Value Date
      183 1 1234 2016-04-01
      184 7 1567 2016-04-01
      185 1 15489 2016-04-01
      185 6 156 2016-04-01
      186 1 45 2016-04-01
      Wobei ZNR für ímmer genau einen technischen Zählerwert steht (z.B. Wärmeleistung, Menge, Temperaur) und im Typ wird definiert ob es sich um einen Max oder Min, Summe etc. handelt.

      Ich suche eine Abfrage die mir folgendes Ergebnis liefert.
      Typ Value1 Value2 Date
      1 245 12 2016-04-01
      1 569 368 2016-04-02
      1 123 458 2016-04-03
      Es soll also für einen Tag z.B. zwei Wertenebeneinander ausgeben.

      Ich hoffe diese Erläuterung trägt zum Verständnis bei.

      Die Tips haben vorerst nicht das erwünschte Ergebnis gebracht.
      Gruß Bulli

      Comment


      • #4
        Originally posted by Bulli View Post
        Hallo,

        hier ein Auszug meiner Rohtabelle ..
        Es soll also für einen Tag z.B. zwei Wertenebeneinander ausgeben.

        Ich hoffe diese Erläuterung trägt zum Verständnis bei.

        Die Tips haben vorerst nicht das erwünschte Ergebnis gebracht.
        Ok, schön dass Du die Daten lieferst, aber kannst Du vielleicht einfach auch nennen, was das nicht gewünschte Ergebnis war, also die Fehlermeldung oder falsche Darstellung? Das wäre sehr hilfreich.
        Gruß, defo

        Comment


        • #5
          Die Tabelle in Beitrag #1 ist die "falsche" Darstellung.
          Gruß Bulli

          Comment


          • #6
            Das kann ich mir nicht so recht glauben. Kannst Du mal das Statement zeigen, was Du versucht hast?
            BTW. Die Beispieldaten (Roh versus Ergebnis) bauen nicht aufeinander auf oder?
            Gruß, defo

            Comment


            • #7
              OK, ich fange nochmal von vorne an.

              Ein Auszug aus meiner Rohdatentabelle 'zw':

              ZNR Typ Value Date
              183 1 1234 2016-04-01
              184 7 1567 2016-04-01
              185 1 15489 2016-04-01
              185 6 156 2016-04-01
              186 1 45 2016-04-01
              Die Zählernummer('znr') ist beliebig aber eindeutig. Und für jedes Datum gibt es pro Zählernummer und Typ immer nur einen 'Value'.

              Mit folgender Abfrage:

              Code:
              SELECT typ, date, if(znr=183, value,NULL) Waerme,
                                if(znr=185, value,NULL) Strom
              FROM zw
              WHERE znr IN (183,185)
                     AND typ =1
                AND date BETWEEN '2016-04-01' AND '2016-04-03' order by znr,date
              bekomme ich folgendes Ergebnis:

              Typ Date Waerme Strom
              1 2016-04-01 NULL 15489
              1 2016-04-02 NULL 11245
              1 2016-04-03 NULL 9856
              1 2016-04-01 1234 NULL
              1 2016-04-02 5423 NULL
              1 2016-04-03 564 NULL
              Ich bin nun auf der Suche nach eine Abfrage die mir folgendes Ergebnis liefern kann:

              Typ Date Waerme Strom
              1 2016-04-01 1234 15489
              1 2016-04-02 5423 11245
              1 2016-04-03 564 9856
              Gruß Bulli
              Gruß Bulli

              Comment


              • #8
                Spukt es hier?

                Egal, ich zitier mich mal selbst

                Originally posted by defo View Post
                Mach ein Group By nach typ, date darunter und nehme im Select Max(Strom), Max(Wärme)
                und ich präzisiere:
                ..nehme im Select statt des Ausdrucks für Strom und Wärme ein Max(Ausdruck für strom ) , Max(ausdruck für Wärme)
                Hast Du das so oder ähnlich ausprobiert ? Und mit welchem Ergebnis bzw. Fehler?
                Gruß, defo

                Comment


                • #9
                  Ich habe bei deinem ersten Hinweis nicht verstanden wie du das mit dem Max() gemeint hast.
                  Mit etwas zusätzlicher Unterstüzung benutze ich nun folgendes Statement:

                  Code:
                  SELECT typ, date, max(waerme),
                                    max(strom)
                  FROM
                    (SELECT typ, date, if(znr=185,value,NULL)waerme,
                                       if(znr=166,value,NULL)strom,
                     FROM zw
                     WHERE znr IN(185,
                                  166)
                       AND typ=1
                       AND date BETWEEN "yyyy-mm-dd" AND "yyyy-mm-dd"
                     ORDER BY date) AS Sub
                  GROUP BY typ,date
                  und es bringt das gewünschte Ergebnis.

                  Dieses Statement funktioniert auch
                  Code:
                  SELECT w.typ,
                         w.date,
                         w.value AS waerme,
                         s.value AS Strom
                  FROM zw w leftjoin zw s ON w.typ=s.typ
                  AND w.date=s.date
                  AND w.znr=185
                  AND s.znr=166
                  WHERE s.date BETWEEN "yyyy-mm-dd" AND "yyyy-mm-dd"
                  ORDER BY s.date
                  Danke für die Unterstützung.
                  Gruß Bulli

                  Comment

                  Working...
                  X