MYSQL Mehrere Ergebnisse als Spalte ausgeben

So das geht schonmal, aber es wird nur jeweils ein Wert pro Name angezeigt. Ist es auch möglich alle Werte zu einem Namen anzuzeigen?
 
Wenn ich die Select Anweisung ausführe bekomme ich als Ausgabe:

Datum|Uhrzeit|name1|name2|name3
XXXX XXXXX XXXX XXXX XXXXX

Also als Ergebnis nur eine Zeile.
Mein Ziel ist es ja alle Datensätze zu name1, name2 und name3 anzuzeigen.
 
Zuletzt bearbeitet:
Ja, das wolltest du doch, oder?

Ansonsten:
Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Ich hab meine Tabelle mit den Log-Daten.

Tabelle Log-Datenaufbau:
Datum|Uhrzeit|Wert|Name

Ich will mir jetzt mehrere Namen anzeigen lassen mit dem dazugehörigem Datum und die Uhrzeit.

Datum|Uhrzeit|Name1|Name2|Name3|...
----x---|---y----|---z-----|----a---|---b----|...

Für z, a und b sollen die Werte angezeigt werden, die zu den unterschiedlichen Namen gehören.
 
Jepp. Und was gibt mein SQL aus?

Mein Test:

Testtabelle
Code:
datum | uhrzeit | wert| name
------|---------|------|------
1     | 2       | wz   | z
1     | 2       | wa   | a
1     | 2       | wb   | b
2     | 3       | vz   | z
2     | 3       | va   | a
2     | 3       | vb   | b

SQL:
SELECT
    t.datum,
    t.uhrzeit,
    MAX(IF(t.`name` = 'z', wert, NULL)) AS z,
    MAX(IF(t.`name` = 'a', wert, NULL)) AS a,
    MAX(IF(t.`name` = 'b', wert, NULL)) AS b
FROM 
   testtabelle AS t
GROUP BY
    t.datum,
    t.uhrzeit;
Ausgabe
Code:
datum | uhrzeit | z  | a   | b
------------------------------
1     | 2       | wz | wa | wb
2     | 3       | vz | va | vb

So wie ich das verstehe ist das das was du haben willst.
 
Heute ist ein seltsamer Tag, ich hab das Ganze jetzt nochmal ausprobiert. Und jetzt bekomme ich die Daten so angezeigt wie ich es haben wollte. Danke!
 
Zuletzt bearbeitet:
Dann kan ich dir nicht helfen. Mein Besipiel habe ich getestet. Deine Umsetzung sehe ich nicht.
Ergo ist irgendwo auf deiner Seite ein Fehler.

Haben wirklich alle die du auf einer Zeile haben willst die genau gleiche Uhrzeit? Ohen eine Sekunde Unterschied?
 
Ja, die Daten sind immer innerhalb einer Sekunde vorhanden. Das einzige was mir noch fehlt sind die JOIN Verbindungen zu den Namen, darum kümmer ich mich morgen drum. Und Danke nochmal das du dir den halben Tag Zeit genommen hast :) ...

Eine Frage habe ich jetzt doch noch, was ist wenn der "name" in der Tabelle nur eine id ist, wie kann ich über JOIN? Zugriff auf den Namen bekommen, um danach zu suchen?

Tabelle Namen
id name
1 XXX
2 XXX

Tabelle Log-Datei
id | Datum ...| id_name
1 | XXX | 12
2 | XXX | 15
3 | XXX | 18
3 | XXX | 33
 
Ein ganz normaler JOIN
SQL:
SELECT
  n.`name`
  l.*
FROM
  log AS l
  INNER JOIN namen AS n
    ON l.id_name = n.id

Nachtrag:
Daruas ergibt sich das folgende
SQL:
SELECT
    l.datum,
    l.uhrzeit,
    MAX(IF(n.`name` = 'z', l.wert, NULL)) AS z,
    MAX(IF(n.`name` = 'a', l.wert, NULL)) AS a,
    MAX(IF(n.`name` = 'b', l.wert, NULL)) AS b
FROM 
  	log AS l
 	INNER JOIN namen AS n
    	ON l.id_name = n.id
 GROUP BY
    l.datum,
    l.uhrzeit;
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück