Frage zu SELECT Statement: Wert in Zeile in einer Spalte darstellen

TheDude69

Benutzer
Beiträge
8
Hallo Zusammen,

bei ein Select Statement komme ich leider nicht weiter und wäre für eure Hilfe dankbar.

Ich habe hier zwei Tabellen, ich nenne sie mal Kopftabelle und Positionstabelle. In der Positionstabelle sind Messwerte gespeichert, wobei in der Spalte AttribName die Messmethode steht und in der Spalte AttribValue der Messwert.

Kopftabelle isw3d_header:
upload_2018-3-20_7-59-40.png

Positionstabelle isw3d_values:
upload_2018-3-20_7-59-55.png

Ein Datensatz in der Positionstabelle:
upload_2018-3-20_8-3-19.png

Meine Abfrage:
SELECT artnr,zeitstempel,AttribName,AttribValue
FROM bde.isw3d_values
INNER JOIN bde.isw3d_header
ON isw3d_header.guid = isw3d_values.headerguid
WHERE isw3d_header.artnr = '292533000327505' AND isw3d_header.zeitstempel >= '2018-03-15' AND
(isw3d_values.AttribName = 'Parallelitaet' OR isw3d_values.AttribName = 'Ebenheit 0,4')
ORDER BY zeitstempel,AttribName;

Das Ergebnis:
upload_2018-3-20_8-4-39.png

Was ich aber gerne hätte, wäre das Ergebnis wie folgt, um es direkt in z. B. Excel weiterverarbeiten zu können: artnr|zeitstempel|AttribValue_Ebenheit_04|AttribValue_Paralletitaet|...

Ist soetwas mit dieser Tabellenstruktur überhaupt möglich und wenn ja, wie müsste ich das Statement dazu verändern?

Vorab vielen Dank für eure Hilfe,
viele Grüße

TheDude
 
Werbung:
Hallo akretschmer,

... anhand der Beispiele (leider alles Postgres, ich verwende MariaDB) habe ich mal versuche nachzuvollziehen, wie das ganze funktioniert. Meine letzte Query sieht nun aus wie folgt:

select artnr,zeitstempel,

(select AttribValue from bde.isw3d_values join bde.isw3d_header on isw3d_header.guid = isw3d_values.headerguid
where isw3d_header.artnr = '292533000327505'
and isw3d_header.zeitstempel >= '2018-03-15'
and isw3d_values.AttribName = 'Parallelitaet') as Parallelitaet,

(select AttribValue from bde.isw3d_values join bde.isw3d_header on isw3d_header.guid = isw3d_values.headerguid
where isw3d_header.artnr = '292533000327505'
and isw3d_header.zeitstempel >= '2018-03-15'
and isw3d_values.AttribName = 'Ebenheit 0,4') as Ebenheit_0_4

from bde.isw3d_header;


Leider bekomme ich jetzt stets die Fehlermeldung zurück, dass die Sub-Query mehr als eine Reihe zurück liefert. Dies wäre eigentlich auch korrekt ...

Hast Du evtl. einen Tipp für mich, damit ich dieses Problem gelöst bekomme?

Besten Dank vorab,
viele Grüße

TheDude
 
Werbung:
Mal von Deiner Ergebnistabelle ausgehend:

Code:
test=*# select * from bla;
 artnr |  zeitstempel  |  attribut  | value
-------+---------------------+-------------+-------
  4711 | 2018-03-15 10:00:00 | ebenheit  | 0.123
  4711 | 2018-03-15 10:00:00 | was anderes | 0.345
  4711 | 2018-03-15 10:10:00 | ebenheit  | 0.321
  4711 | 2018-03-15 10:10:00 | was anderes | 0.678
  4711 | 2018-03-15 10:20:00 | ebenheit  | 0.987
  4711 | 2018-03-15 10:20:00 | was anderes | 0.555
(6 Zeilen)

test=*# select artnr, zeitstempel, sum(value) filter (where attribut = 'ebenheit') as ebenheit, sum(value) filter (where attribut='was anderes') as was_anderes from bla group by artnr,zeitstempel order by artnr,zeitstempel;
 artnr |  zeitstempel  | ebenheit | was_anderes
-------+---------------------+----------+-------------
  4711 | 2018-03-15 10:00:00 |  0.123 |  0.345
  4711 | 2018-03-15 10:10:00 |  0.321 |  0.678
  4711 | 2018-03-15 10:20:00 |  0.987 |  0.555
(3 Zeilen)

test=*#

FILTER kann MySQL natürlich nicht, wäre auch zu cool, gell? Daher das auf case when ... umschreiben, zur Übung ;-)
 
Zurück
Oben