Temporäre Tabellen sind auch bei anderen Systemen, wiez.B. bei Oracle problemlos möglich.
Man kann dies aber auch durch Erzeugen und löschen einer normalen Tabelle simulieren, allerdings mit Performance-Einbußen.
Eine Lösung, welche vom jeweiligen
SQL-Dialekt unabhängig ist:
Per select-Anweisung die Anzahl verschiedener Adressierungsarten feststellen.
Ausgabetabelle mit CreateTable mit der entsprechenden Spaltenzahl erzeugen.
Abfrage mit Artikelnummer, Adressart und Preis öffnen.
Tabelle in einer Schleife füllen, dabei die Preise in den jeweiligen Spalten eintragen. Du kannst z.B. mit Next die Anzahl Spalten nach vorne gehen, die Werte holen und schreiben.
DBGrid dynamisch erzeugen.
Falls Dir fünf Preisspalten reichen, geht es auch per View.
Zuerst musst Du die Preise nebeneinander bekommen. Das geht mit einer fünffach verschachtelten Abfrage. Ein Beispiel kann ich Dir allerdings nur in Oracle-
SQL bringen
Code:
select
q.ID, q.A_1, q.A_2, q.A_3, q.A_4, p.Preis as A_5
from
Tabelle2 p,
(select
q.ID, q.A_1, q.A_2, q.A_3, p.Preis as A_4
from
Tabelle2 p,
(select ...
...
) q
where
(q.ID (+)= p.Artikel_id)
and
(p.Adressart = 5)
Du erzeugst also zuerst eine Abfrage, welche Adressart 1 mit Preis und ID ergibt. Diese Abfrage ist mit einem Left Join mit der Tabelle verbunden. So wird das gesamte Ergebnis der ersten Abfrage in der zweiten Abfrage mit Adressart 2 verbunden - bis zur Adressart 5.
Das Ergebnis solltest Du allerdings zwischenspeichern, da für 5 Spalten 5^4 Abfragen, also 625 Abfragen ausgeführt werden.