Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Union Select und group by Problem (https://www.delphipraxis.net/145866-union-select-und-group-problem.html)

verkouter 9. Jan 2010 19:35

Datenbank: Paradox • Zugriff über: ODBX

Union Select und group by Problem
 
Ich habe eine Tabelle in der gibt es 14 Felder für eine Leistungsverzeichnisnummer,14 Felder für eine
Bezeicchnung,14 Felder für Einheit und 14 Felder füt Menge.
Jeder Datensatz steht für einen Tag in einem Bautagebuch.Ich arbeite das erste Mal mit
Query und SQL-Abfragen. In dem Programm soll es eine Seite geben die mir die Leistungen addiert.

Delphi-Quellcode:
with Query1.SQL do
begin
Clear;
Add('SELECT lvn1,be1,ein1,me1');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn2,be2,ein2,me2');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn3,be3,ein3,me3');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn4,be4,ein4,me4');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn5,be5,ein5,me5');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn6,be6,ein6,me6');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn7,be7,ein7,me7');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn8,be8,ein8,me8');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn9,be9,ein9,me9');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn10,be10,ein10,me10');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn11,be11,ein11,me11');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn12,be12,ein12,me12');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn13,be13,ein13,me13');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn14,be14,ein14,me14');
Add('FROM "' + Datei + '" ');
end;
Query1.Open;
Mit diesen Code fülle ich ein Query.Ich bekomme es aber nicht hin,dass er mir die Bezeichnung(be)
gruppiert und von der Menge(me)die summe bildet.

mkinzler 9. Jan 2010 19:40

Re: Union Select und group by Problem
 
Villeicht solltest du mit Aliasen dafür sorgen, dass er auch was zu gruppieren hat

SQL-Code:
  SELECT
    lvn1 as lvn, be1 as b1, ein1 as ein, me1 as m3

UNION
  SELECT
    lvn2 as lvn, be2 as be, ein2 as ein, me2 as me
...

verkouter 9. Jan 2010 21:05

Re: Union Select und group by Problem
 
Jetzt bekomme ich die Fehlermeldung "ungültiger Feldname".

Delphi-Quellcode:

Add('SELECT lvn1 as Nummer,be1 as Be,ein1 as Einheit,me1 as Menge');
Add('FROM "' + Datei + '" ');
.
.
.
Add('union SELECT lvn14 as Nummer,be14 as Be,ein14 as Einheit,me14 as Menge');
Add('FROM "' + Datei + '" ');
add('group by Be');
Und wie kann ich noch die Summen berechnen?

Sir Rufo 9. Jan 2010 21:59

Re: Union Select und group by Problem
 
- in eine eigene (temporäre) tabelle überführen und dann mit group dran
- ein view erzeugen und darüber mit group

aber das geht mE nicht mit paradox

Jürgen Thomas 10. Jan 2010 10:43

Re: Union Select und group by Problem
 
Hallo,

die Alias-Namen des ersten SELECT gelten für alle anderen. Du darfst sie also nur beim ersten SELECT aufführen.

Zur Gruppierung und Summierung kannst du die UNION-Konstruktion als Tabelle für einen weiteren SELECT benutzen:
SQL-Code:
SELECT Be, SUM(Menge) FROM
   ( SELECT ... UNION ... SELECT )
GROUP BY Be;
Vorausgesetzt, das geht bei Paradox.

Gruß Jürgen

verkouter 10. Jan 2010 13:01

Re: Union Select und group by Problem
 
Wie gesagt,ich habe noch keine Ahnung von SQL-Abfragen.Habe schon nach ähnlichen Quelltext
gesucht um die Abfrage zu verstehen.

Habe meinen Quellcode abgeändert.
Delphi-Quellcode:
with Query1.SQL do
begin
Clear;
add('Select Bezeichnung,Sum(Menge) from');
Add('(SELECT lvn1 as Nummer,be1 as Bezeichnung,ein1 as Einheit,me1 as Menge');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn2,be2,ein2,me2');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn3,be3,ein3,me3');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn4,be4,ein4,me4');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn5,be5,ein5,me5');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn6,be6,ein6,me6');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn7,be7,ein7,me7');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn8,be8,ein8,me8');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn9,be9,ein9,me9');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn10,be10,ein10,me10');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn11,be11,ein11,me11');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn12,be12,ein12,me12');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn13,be13,ein13,me13');
Add('FROM "' + Datei + '" ');
Add('union SELECT lvn14,be14,ein14,me14');
Add('FROM "' + Datei + '" )');
add('group by Bezeichnung');
Und bekomme jetzt als Fehlermeldung

Ungültiges Schlüsselwort Symbol-String:SELECT

Jürgen Thomas 10. Jan 2010 13:13

Re: Union Select und group by Problem
 
Das deutet darauf hin, dass diese Konstruktion tatsächlich unter Paradox mit ODBX nicht zulässig ist (vorausgesetzt, du hast die Klammern richtig gesetzt, aber es sieht eigentlich danach aus).

Dann möchte ich den Vorschlag von Sir Rufo aufgreifen, das Ergebnis der UNION-Konstruktion in einer temp. Tabelle zu speichern und diese auszuwerten.

Brauchst du eigentlich bei deinen Tabellen die ständigen Gänsefüßchen? "Ohne" wäre es übersichtlicher.

Siehe auch [wikibooks] Einführung in SQL, auch wenn all das bei dem konkreten Problem nicht hilft.

Gruß Jürgen

verkouter 10. Jan 2010 13:58

Re: Union Select und group by Problem
 
Wie lege ich denn eine virtuelle Tabelle an?

Sir Rufo 10. Jan 2010 14:05

Re: Union Select und group by Problem
 
Ist zwar keine Lösung für dein Problem, aber lade doch das Skript aus einer Datei ...
Datei "MeinSelect.sql":
Code:
SELECT lvn1 as Nummer,be1 as Bezeichnung,ein1 as Einheit,me1 as Menge
FROM "{Datei}"
union
SELECT lvn2,be2,ein2,me2
FROM "{Datei}"
union
SELECT lvn3,be3,ein3,me3
FROM "{Datei}"
und dann
Delphi-Quellcode:
SQL.LoadFromFile( 'MeinSelect.sql' );
SQL.Text := StringReplace( SQL.Text, '{Datei}', Datei, [ rfReplaceAll ] );
Wie du siehst, verkürzt das den Quelltext ungemein, und du kannst den Select ändern,
ohne ständiges Neucompilieren.

sx2008 10. Jan 2010 14:11

Re: Union Select und group by Problem
 
Zitat:

Zitat von verkouter
Ich habe eine Tabelle in der gibt es 14 Felder für eine Leistungsverzeichnisnummer,14 Felder für eine
Bezeicchnung,14 Felder für Einheit und 14 Felder füt Menge.

Eigentlich fängt hier schon das Problem an. Die Datenbank ist nicht in der 3. Normalform!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz