Moin Zusammen, habe mich gerade neu registriert. Kenne mich in Access etwas aus, bei SQL bis jetzt aber recht unbefleckt. Habe folgendes Problem.
Nehmen wir an ich hätte eine Stückliste zu einer TEILE-NR, diese besteht aus zwei Komponenten. In der Abfrage erhalte ich eine Tabelle mit zwei Zeilen, Gleicher Wert bei TEILE-NR. Ich möchte diese nun in einer Zeile darstellen.
Ausgangssituation:
TEILE-NR ! KOMPONENTE-NR ! KOMPONENTE-BEZ
123 ! 456 ! ABC
123 !789 ! XYZ
Gewünschtes Ergebnis:
TEILE-NR ! KOMPONENTE-NR1 ! KOMPONENTE-BEZ1 ! KOMPONENTE-NR2 ! KOMPONENTE-BEZ2
123 ! 456 ! ABC !789 ! XYZ
Gibt es hierfür eine SQL-Lösung, und wie wäre diese aufgebaut?
Anmerkung:
Es ist vorher nicht bekannt, aus wie vielen Komponenten eine TEILE-NR besteht, sprich die Anzahl der Zeilen sollte möglichst variabel sein.
Vorab vielen Dank.
Zwei Zeilen in eine Zeile bekommt man über einen SELF JOIN.
SELECT
T1.[TEILE-NR],
T1.[KOMPONENTE-NR] AS Nr1,
T1.[KOMPONENTE-BEZ] AS B1,
T2.[KOMPONENTE-NR] AS Nr2,
T2.[KOMPONENTE-BEZ] AS B2
FROM
TabelleX AS T1
INNER JOIN TabelleX AS T2
ON T1.[TEILE-NR] = T2.[TEILE-NR]
WHERE
T1.[KOMPONENTE-NR] < T2.[KOMPONENTE-NR]
Bei mehr als zwei Zeilen müsste man die Anweisung statisch (maximale Anzahl bekannt) oder dynamisch ausbauen.
Alternativ kann man über Kreuztabellenabfragen gehen. Diese bieten Flexibilität gegenüber diesen Anzahlen, lassen aber in Normalverwendung nur eine Spalte für die Pivotisierung zu (Nummer oder Bezeichnung). Man könnte aber zwei Kreuztabellenabfragen verknüpfen und über diesen weiteren Schritt zu der gewünschten Ansicht kommen.
Oder man traut sich das: PIVOT-Anzeige von mehr als einem Inhalt (https://www.ms-office-forum.net/forum/showpost.php?p=2061120&postcount=2)
Mit etwas mehr Sorgfalt bei den Bezeichnungen kann man auf viele Klammern verzichten.