![]() |
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:
Mit diesen Code fülle ich ein Query.Ich bekomme es aber nicht hin,dass er mir die Bezeichnung(be)
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; gruppiert und von der Menge(me)die summe bildet. |
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 ... |
Re: Union Select und group by Problem
Jetzt bekomme ich die Fehlermeldung "ungültiger Feldname".
Delphi-Quellcode:
Und wie kann ich noch die Summen berechnen?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'); |
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 |
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:
Vorausgesetzt, das geht bei Paradox.
SELECT Be, SUM(Menge) FROM
( SELECT ... UNION ... SELECT ) GROUP BY Be; Gruß Jürgen |
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:
Und bekomme jetzt als Fehlermeldung
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'); Ungültiges Schlüsselwort Symbol-String:SELECT |
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 ![]() Gruß Jürgen |
Re: Union Select und group by Problem
Wie lege ich denn eine virtuelle Tabelle an?
|
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:
und dann
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}"
Delphi-Quellcode:
Wie du siehst, verkürzt das den Quelltext ungemein, und du kannst den Select ändern,
SQL.LoadFromFile( 'MeinSelect.sql' );
SQL.Text := StringReplace( SQL.Text, '{Datei}', Datei, [ rfReplaceAll ] ); ohne ständiges Neucompilieren. |
Re: Union Select und group by Problem
Zitat:
![]() |
Re: Union Select und group by Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Normalisierung hatte ich schon probiert.Habe meine Tabelle in drei Tabellen zerlegt.
Haupttabelle Id Datum Stunden Geräte Leistungstabelle LV-Nummer Bezeichnung Menge Einheit Baustoffe Bezeichnung Menge Einheit Hatte soweit auch prima geklappt.Auch in der Leistungsansicht Group by und Summierung. Allerdings soll die Eingabemaske so erhalten bleiben. Mir ist dann nicht gelungen den Dbcomboboxen für Leistungen die Werte zuzuweisen. |
Re: Union Select und group by Problem
Deine Leistungstabelle hat ja gar keinen Bezug zur Haupttabelle.
Die Tabelle braucht einen ![]() Haupttabelle Id Datum Stunden Geräte Leistungstabelle Id (Primärschlüssel) IdHaupttab (Fremdschlüssel auf Haupttabelle) IdEinsatz LV-Nummer Bezeichnung Menge Einheit Für die Leistungstabelle würde ich an deiner Stelle auch keine einzelnen Edit- oder Combofelder verwenden, sondern gleich ein DBGrid verwenden. Damit bleibt auch die Anzahl der Leistungen nach oben unbegrenzt. (also mehr als 14 Stück möglich) |
Re: Union Select und group by Problem
Doch die Verbindung mit einem Schlüssel war hergestellt,habe ich vergessen.
Die Eingabemaske soll auf alle Fälle so erhalten bleiben.Keine Verwendung von DBgrid. |
Re: Union Select und group by Problem
Dann versuch es doch mit einem TDBCtrlGrid
|
Re: Union Select und group by Problem
Mit TDBCtrlGrid hatte ich bis jetzt noch nie gearbeitet, ich habs ausprobiert,und zu Anzeige der
Datensätze funktioniert es.Aber ich habe keine Möglichkeit darin einen Datensatz hinzuzufügen. Oder doch??? Und das nächste Problem ist,das die Felder meiner jetzigen Eingabemaske nach Excel exportiert werden. |
Re: Union Select und group by Problem
Zitat:
Das ist doch ein Vorschlag zum Normalisieren. Mit der Compo kann man auch Datensätze anfügen aber in deinem Fall würde ich das auf jeden Fall ausschließen. |
Re: Union Select und group by Problem
Habe jetzt mehrere TDBCtrlGrid Versuche mit DBCtrlGrid durchgeführt.Als erstes habe ich eine
DBcomboboxhinzugefügt, bei drei Leistungen am Tag zeigt er mir dann auch 3 DBcomboboxen mit den Leistungen an.Ich habe dann aber keine leeren Comboboxen für zusätzliche Leistungen.Füge ich allerdings schon 14 DBcomboboxen ein und ich habe 3 Leistungen zeigt er mit 3x14 DBcomboboxen an. |
Re: Union Select und group by Problem
öh, hast du die db denn schon normalisiert?
|
Re: Union Select und group by Problem
Ja ich habe im Moment zwei Programmversionen.Würden am liebsten die große Tabelle behalten,und
das irgendwie mit dieser virtuellen Tabelle hinbekommen.Habe jetzt mal mit Query.sql.add('create view Leistung as') rumexperimentiert, bekomme aber auch nur Fehlermeldungen. Habe halt von SQL-Abfragen keine Ahnung. |
Re: Union Select und group by Problem
Zitat:
|
Re: Union Select und group by Problem
Zitat:
|
Re: Union Select und group by Problem
Hallo,
ob Paradox mit geschachtelten Selects zurechtkommt, weiß ich nicht, aber wenn, so sind im folgenden syntaktische Fehler: Zitat:
|
Re: Union Select und group by Problem
Zitat:
|
Re: Union Select und group by Problem
Hallo,
Zitat:
|
Re: Union Select und group by Problem
Ich habe mich jetzt doch für die normalisierte Tabelle entschieden. Wenn ein neuer
Datensatz in der Haupttabelle angelegt wird, lege ich 14 leere Datensätze in der Leistungstabelle an,dammit funktionierte es jetzt auch mit der DBctrlgrid. Vielen Dank für die Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz