Diese Abfrage bitte:
SELECT
MAX(CASE WHEN t.colName = 'C1' THEN t.f ELSE NULL END) AS 'C1',
MAX(CASE WHEN t.colName = 'C2' THEN t.f ELSE NULL END) AS 'C2',
MAX(CASE WHEN t.colName = 'C3' THEN t.f ELSE NULL END) AS 'C3',
MAX(CASE WHEN t.colName = 'C4' THEN t.f ELSE NULL END) AS 'C4'
FROM
(
SELECT c2 AS f,
'C2' AS colName,
@rn2 := @rn2 + 1 row_number
FROM mergetable,(SELECT @rn2 := 0) var
WHERE c2 IS NOT NULL
UNION
SELECT c1,
'C1' AS colName,
@rn1 := @rn1 + 1 row_number
FROM mergetable,(SELECT @rn1 := 0) var
WHERE c1 IS NOT NULL
UNION
SELECT
c4,
'C4' AS colName,
@rn4 := @rn4 + 1 row_number
FROM mergetable,(SELECT @rn4 := 0) var
WHERE c4 IS NOT NULL
UNION
SELECT
c3,
'C3' AS colName,
@rn3 := @rn3 + 1 row_number
FROM mergetable,(SELECT @rn3 := 0) var
WHERE c3 IS NOT NULL
) t
GROUP BY t.row_number;
Bitte überprüfen Sie die DEMO HERE
Erläuterung:
einer der inneren Abfragen vor:
Hier ist eine:
SELECT c2 AS f,
'C2' AS colName,
@rn2 := @rn2 + 1 row_number
FROM mergetable,(SELECT @rn2 := 0) var
WHERE c2 IS NOT NULL;
Ausgang für Spalte C2:
f colName row_number
y C2 1
z C2 2
Eigentlich jeder der obigen inneren Abfrage wird eine gleichermaßen Ausgangsstruktur geben:
Ausgang für Spalte C1:
f colName row_number
x C1 1
w C1 2
Ausgang für Spalte C3:
f colName row_number
p C3 1
Q C3 2
Ausgang für Spalte C4:
f colName row_number
A C4 1
B C4 2
C C4 3
Nun, wenn Sie UNION
sie alle erhalten Sie eine Ausgangsstruktur wie unten erhalten:
f colName row_number
y C2 1
z C2 2
x C1 1
w C1 2
A C4 1
B C4 2
C C4 3
p C3 1
Q C3 2
Schau, wenn ich nicht die Spaltennamenspalte in jeder der inneren Abfragen verwendet hätte, gäbe es jetzt einen Weg um zu wissen, welcher Wert zu welcher Spalte gehört.
Jetzt von der oben genannten endgültigen Ausgabestruktur, wenn Sie pivoting
verwenden, dann können Sie leicht die erwartete Ausgabe ableiten.
Wenn nur 1 Spalte ausgefüllt wird, dann sieht es wie ein schlechtes Design aus.Sie können 2 Spalten hinzufügen, der erste enthält den Wert, den Sie als Spaltenname eingegeben haben, und die zweite Spalte enthält den Wert. – Spidey
@Nimesh Dies ist keine entworfene Tabelle, aber die Ausgabe von Pivot-Tabelle generiert Abfrage lesen Sie hier, als Sie den Zweck verstehen, beziehen Sie sich auf http://stratosprovatopoulos.com/web-development/mysql/pivot-a-table-in -mysql/ – geeksal
Ich weiß, was eine Pivot-Tabelle ist und wie es funktioniert, Sie haben das als Tabelle erwähnt, also habe ich den Vorschlag hinzugefügt. Ist das die Ausgabe, dann hättest du das entsprechend erwähnen sollen und den Code bereitgestellt. Übrigens, hast du 'coalesce' verwendet, wie in Schritt 4 des Artikels erwähnt, um die Nullen loszuwerden? – Spidey