Abfrage zusammenfassen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Abfrage zusammenfassen

Beitrag von laines »

Hallo

Hat vielleicht jemand eine Idee, wie ich diese Abfrage in eine bekomme ??
Irgendwie stehe ich gerade auf dem Schlauch :cry:

Code: Alles auswählen

SQLQuery1.SQL.ADD('SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
    ',SUM( CASE WHEN YEAR(tz.dDatum) = '+jahr+' THEN tz.fBetrag ELSE 0 END) ['+jahr+'] ' +
    'FROM tkunde tk ' +
    'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
    'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
    'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
    'ORDER BY [' + jahr + '] DESC');
 
 //Hier wird der Combobox Eintrag der gewählt wurde eingetragen
    //Eintrag Betrag ändern Verbindungen wieder öffnen
    DBGrid1.COLUMNS.Items[8].Title.Caption := '*Umsatz bezahlt '+ jahr;
    DBGrid1.COLUMNS.Items[8].FieldName := jahr;
 
      begin
  IF (jahr = 'Gesamt') Then
begin
    //Erst mal Verbindungen schliessen
    SQLQuery1.Active:=False;
    SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.ADD('SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
  ',SUM(tz.fBetrag) AS [Gesamt] ' +
  'FROM tkunde tk ' +
   'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
   'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
   'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
   'ORDER BY [Gesamt] DESC');
  end;
Gruß
Laines

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Abfrage zusammenfassen

Beitrag von pluto »

Da ich keine Unterschiede zwischen den Abfragen erkenne, würde ich den String "'SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
',SUM(tz.fBetrag) AS [Gesamt] ' +
'FROM tkunde tk ' +
'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
'ORDER BY [Gesamt] DESC'"

einfach in eine Konstante ablegen:
Über Type, const
mystr = 'SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
',SUM(tz.fBetrag) AS [Gesamt] ' +
'FROM tkunde tk ' +
'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
'ORDER BY [Gesamt] DESC'

Dann kannst du einfach schreiben "SQLQuery1.SQL.ADD(MyStr)" und Fertig.
MFG
Michael Springwald

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Abfrage zusammenfassen

Beitrag von laines »

Ger Unterschied liegt hier:

Diese Abfrage liefert den KPL. Umsatz über alle Jahre

Code: Alles auswählen

',SUM(tz.fBetrag) AS [Gesamt] ' +
Die 1. Abfrage Summiert, wenn das Jahr 2005 ... oder so ist

Code: Alles auswählen

',SUM( CASE WHEN YEAR(tz.dDatum) = '+jahr+' THEN tz.fBetrag ELSE 0 END) ['+jahr+'] ' +
Aber da ich diese Abfrage ca. übertriebene 1000 x mal habe bin ich für den Type myStr. R I E S I G dankbar

ÄHHHH noch ne doofe Frage: wo setzte ich die denn, dass ich die Global habe ?
Es sind nämlich hier Variablen drin.


Gruß
Laines

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Abfrage zusammenfassen

Beitrag von DiBo33 »

Code: Alles auswählen

const
  sqlQuery = 'SELECT tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt ' +
    ',%s ' +
    'FROM tkunde tk ' +
    'INNER JOIN trechnung tr ON tk.kKunde = tr.tKunde_kKunde ' +
    'INNER JOIN tZahlung tz ON tr.tBestellung_kBestellung = tz.kBestellung ' +
    'GROUP BY tk.kKunde, tk.ckundenNr, tk.cFirma, tk.cAnrede, tk.cVorname, tk.cName, tk.cStrasse, tk.cPLZ, tk.cOrt '+
    'ORDER BY [%s] DESC';
 
 
// ...
    strQuery := Format('SUM( CASE WHEN YEAR(tz.dDatum) = %d THEN tz.fBetrag ELSE 0 END) [%d] ',  [jahr, jahr]);
    SQLQuery1.SQL.ADD(Format(sqlQuery, [strQuery, IntToStr(jahr)]));
 
     //Hier wird der Combobox Eintrag der gewählt wurde eingetragen
        //Eintrag Betrag ändern Verbindungen wieder öffnen
        DBGrid1.COLUMNS.Items[8].Title.Caption := '*Umsatz bezahlt '+ jahr;
        DBGrid1.COLUMNS.Items[8].FieldName := jahr;
 
          begin
      IF (jahr = 'Gesamt') Then
    begin
        //Erst mal Verbindungen schliessen
        SQLQuery1.Active:=False;
        SQLQuery1.SQL.Clear;
      SQLQuery1.SQL.ADD(Format(sqlQuery, ['SUM(tz.fBetrag) AS [Gesamt]', 'Gesamt']));
      end;

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Abfrage zusammenfassen

Beitrag von pluto »

@DiBo33

Das wäre Local. Die Frage war:
ÄHHHH noch ne doofe Frage: wo setzte ich die denn, dass ich die Global habe ?
Habe ich doch geschrieben: zwischen der uses Klausel und type schreibst du einfach const und dann den String.
Das ist eine Konstante, die kannst du NICHT ändern zur Laufzeit.
MFG
Michael Springwald

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Abfrage zusammenfassen

Beitrag von DiBo33 »

pluto hat geschrieben:@DiBo33

Das wäre Local.
sqlQuery ist global, local wird nur der variable Teil eingesetzt.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Abfrage zusammenfassen

Beitrag von pluto »

Die Frage war aber: Wohin mit Const?
MFG
Michael Springwald

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: Abfrage zusammenfassen

Beitrag von DiBo33 »

Meine Fresse, das hast du doch schon beantwortet.

laines
Beiträge: 45
Registriert: Mo 18. Apr 2011, 08:30

Re: Abfrage zusammenfassen

Beitrag von laines »

Nicht streiten !!

Das habe ich bereits herausgefunden.
Es war nur das Problem mit den VARIABLEN, die darin waren.
Im oberen Post habe ich ja nun meine Erklärung für die Fehlermeldungen.

Gruß
Laines

Antworten