Databasemerge SQL/Zeileninformationen in Spalten
Ich habe eine Datenbank, wie in der Abbildung zu transformieren. Lassen Sie uns folgende Daten als Beispiel verwenden:
Fertigungsauftrag Tabelle:
WONUM (PK) | WORKTYPE | STATUS | DESCRIPTION
1234 URGENT OPEN Inv. work X.
FAILUREREPORT Tabelle:
FAILUREREPORTID (PK) | WONUM | FAILURECODE | ASSETNUM | TYPE
5678 1234 SYMPT1347 DT-JA-123 Problem
5679 1234 WA4521 DT-JA-123 Cause
5680 1234 SOL1672 DT-JA-123 Solution
FAILURECODE Tabelle:
FAILURECODEID (PK) | FAILURECODE | DESCRIPTION
345 SYMPT1347 Symptom X.
346 WA4521 Cause Y.
347 SOL1672 Solution Z.
ich folgende Abfrage habe, die die Arbeit auf halben Weg macht:
SELECT F.WONUM, W.DESCRIPTION AS WO_DESC, W.STATUS, F.ASSETNUM, F.TYPE, C.DESCRIPTION AS FCODE_DESC
FROM WORKORDER W
INNER JOIN FAILUREREPORT F ON F.WONUM = W.WONUM
INNER JOIN FAILURECODE C ON F.FAILURECODE = C.FAILURECODE
WHERE W.WORKTYPE = 'URGENT' AND W.STATUS <> 'CANCELLED'
ORDER BY F.WONUM ASC, F.TYPE ASC
Es gibt:
WONUM | WO_DESC | STATUS | ASSETNUM | TYPE | FCODE_DESC
1234 Inv. work X. OPEN DT-JA-123 PROBLEM Symptom X.
1234 Inv. work X. OPEN DT-JA-123 CAUSE Cause Y.
1234 Inv. work X. OPEN DT-JA-123 SOLUTION Solution Z.
würde jedoch anstelle von 3 Zeilen, Ich mag die Symptom haben, Ursache und Lösung in einer Zeile aufgeführt, wie folgt:
WONUM | WO_DESC | STATUS | ASSETNUM | PROBLEM | CAUSE | SOLUTION
1234 Inv. work X. OPEN DT-JA-123 Symptom X. Cause Y. Solution Z.
Wie verwende ich Pivot-Funktion, um die Zeilen in Spalten umzuwandeln, wenn es möglich ist? Ich bin auch offen für jede andere Lösung, die zum gewünschten Ergebnis führt. Die Datenbank, in der ich arbeite, ist Oracle DB, während meine Spiel-/Testumgebung MySQL ist. Ich bin mir bewusst, dass Pivot nicht in MySQL verwendet werden kann, aber es gibt Möglichkeiten, die es durch Aggregation und Gruppierung gibt.
Korrigierte alle Bedenken. –
Sie müssen noch 'MIN (CASE WHEN TYPE = 'PROBLEM' THEN C.DESCRIPTION) als PROBLEM END 'zu' MIN (CASE WHEN TYPE =' PROBLEM 'DANN C.DESCRIPTION END) ALS PROBLEM' ändern. – markusk
MySQL schreibt außerdem vor, dass Sie 'MIN (...)' anstelle von 'MIN (...)' (kein Leerzeichen zwischen 'MIN' und' (')) schreiben und' AS WO_DESC' aus dem Verzeichnis entfernen muss "GROUP BY" -Klausel – markusk