MySQL - Datensätze in Abfrage duplizieren
Hallo zusammen,
ich habe in MySQL eine Tabelle:
Spalte A:
1
2
3
4
5
...
Nun kann ich diese wie folgt abfragen:
"SELECT A FROM..."
Wie bekomme ich es aber nun hin, dass ich folgende Ausgabe habe:
1,A
1,B
2,A
2,B
3,A
3,B
...
Ich möchte also jeden Datensatz nochmal duplizieren und jeweils eine Spalte mit dem Wert "A" oder "B" anhängen.
Wie sieht hierfür die Abfrage aus?
ich habe in MySQL eine Tabelle:
Spalte A:
1
2
3
4
5
...
Nun kann ich diese wie folgt abfragen:
"SELECT A FROM..."
Wie bekomme ich es aber nun hin, dass ich folgende Ausgabe habe:
1,A
1,B
2,A
2,B
3,A
3,B
...
Ich möchte also jeden Datensatz nochmal duplizieren und jeweils eine Spalte mit dem Wert "A" oder "B" anhängen.
Wie sieht hierfür die Abfrage aus?
Please also mark the comments that contributed to the solution of the article
Content-ID: 195347
Url: https://administrator.de/contentid/195347
Printed on: December 12, 2024 at 01:12 o'clock
10 Comments
Latest comment
Moin Maik87,
mit SQL geht es immer auch anders...
du kannst dir auch eine Tabelle "whatever" anlegen mit einem Char(1)-Textfeld namens SpalteB, zwei Datensätze mit dem Inhalt "A" und "B" anlegen und dann ein Statement wie folgt formulieren:
Nichtsdestotrotz - eigentlich werden erst mit SQL-Statements Daten durchflöht und dann kommt ein mehr oder weniger erwartetes Resultset zurück.
Der Ansatz "Ich habe ein feststehendes Endergebnis und bau mir die entsprechenden Quelldaten entsprechend" ist zumindest in den alten SQL-Spezifikationen meiner Jugend noch nicht so explizit ausformuliert.
Was ist denn die konkrete Aufgabenstellung, die hinter deiner Frage steht?
Grüße
Biber
mit SQL geht es immer auch anders...
du kannst dir auch eine Tabelle "whatever" anlegen mit einem Char(1)-Textfeld namens SpalteB, zwei Datensätze mit dem Inhalt "A" und "B" anlegen und dann ein Statement wie folgt formulieren:
SELECT dytable.SpalteA, whatever.SpalteB
FROM dytable, whatever
ORDER by 1, 2
Nichtsdestotrotz - eigentlich werden erst mit SQL-Statements Daten durchflöht und dann kommt ein mehr oder weniger erwartetes Resultset zurück.
Der Ansatz "Ich habe ein feststehendes Endergebnis und bau mir die entsprechenden Quelldaten entsprechend" ist zumindest in den alten SQL-Spezifikationen meiner Jugend noch nicht so explizit ausformuliert.
Was ist denn die konkrete Aufgabenstellung, die hinter deiner Frage steht?
Grüße
Biber
Ohne UNION ALL kommst Du hier nicht weiter.
Zwar andere Baustelle, aber warum speicherst Du nicht Anzahl m und Anzahl w in einer Zeile.
Alles eine Frage des Tabellenaufbaus.
Kommt das Ergebnis Deiner Tabelle nicht schon aus einer anderen Abfrage über die Mitarbeiter einer Abteilung?
Gruß Jörg
SELECT x.abteilung AS Abteilung,
'm' AS Geschlecht,
IFNULL(y.anzahl,0) AS Anzahl
FROM (SELECT DISTINCT a.abteilung FROM xy_tabelle AS a) AS x
LEFT JOIN (SELECT a.* FROM xy_tabelle AS a WHERE a.geschlecht = 'm') AS y USING(abteilung)
UNION ALL
SELECT x.abteilung AS Abteilung,
'w' AS Geschlecht,
IFNULL(y.anzahl,0) AS Anzahl
FROM (SELECT DISTINCT a.abteilung FROM xy_tabelle AS a) AS x
LEFT JOIN (SELECT a.* FROM xy_tabelle AS a WHERE a.geschlecht = 'w') AS y USING(abteilung)
Zwar andere Baustelle, aber warum speicherst Du nicht Anzahl m und Anzahl w in einer Zeile.
Abteilung Anz_M Anz_W
EDV 10 0
EINKAUF 2 1
Alles eine Frage des Tabellenaufbaus.
Kommt das Ergebnis Deiner Tabelle nicht schon aus einer anderen Abfrage über die Mitarbeiter einer Abteilung?
Gruß Jörg
[OT]
Aber "SplittingValues" ist immerhin sprechender als "whatever".
Grüße
Biber
[/OT]
Zitat von @Maik87:
Moin,
also ich habe es mit einer weiteren Tabelle "SplittingValues" gelöst - wie in Bibers letztem Beispiel.
Hmmja, wenn ich diese Dummytabelle für die m/w-Info sprechend zu benennen gehabt hätte, dann würde sie wohl "AlwaysSex" heissen...Moin,
also ich habe es mit einer weiteren Tabelle "SplittingValues" gelöst - wie in Bibers letztem Beispiel.
Aber "SplittingValues" ist immerhin sprechender als "whatever".
Grüße
Biber
[/OT]