Einzelnen Beitrag anzeigen

Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#5
  Alt 16. Jul 2002, 11:18

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.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat