AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Union Select und group by Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Union Select und group by Problem

Ein Thema von verkouter · begonnen am 9. Jan 2010 · letzter Beitrag vom 11. Jan 2010
Antwort Antwort
Seite 1 von 3  1 23      
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#1

Union Select und group by Problem

  Alt 9. Jan 2010, 20:35
Datenbank: Paradox • Zugriff über: ODBX
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Union Select und group by Problem

  Alt 9. Jan 2010, 20:40
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
...
Markus Kinzler
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#3

Re: Union Select und group by Problem

  Alt 9. Jan 2010, 22:05
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Union Select und group by Problem

  Alt 9. Jan 2010, 22:59
- 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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 11:43
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#6

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 14:01
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#7

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 14:13
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#8

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 14:58
Wie lege ich denn eine virtuelle Tabelle an?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 15:05
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Union Select und group by Problem

  Alt 10. Jan 2010, 15:11
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!
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.
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