AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

unknown Token DESC

Ein Thema von haentschman · begonnen am 22. Jul 2012 · letzter Beitrag vom 24. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

unknown Token DESC

  Alt 22. Jul 2012, 10:26
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Hallo alle ...

Wer hilft beim Brille putzen ? Ich will eine Ergebnismenge nochmal nach 2 Kriterien sortieren.

SQL sinngemäß:
Delphi-Quellcode:
select * from (
.
komplexes SQL mit UNION funtioniert seperat ohne Sortierung
.
) order by Spalte1, Spalte2 desc
Sollte eigentlich simpel sein. Aber Fehler:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt dBK.exe ist eine Exception der Klasse EIBCError mit der Meldung '
Dynamic SQL Error
SQL error code = -104
Token unknown - line 6, column 31
desc' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
diverse Tutorials sagen dazu:
Zitat:
ORDER BY "Spalten_Name1" [ASC, DESC], "Spalten_Name2" [ASC, DESC]
Danke...

Nachtrag:
Der Knackpunkt muß wo anders liegen. Wenn ich Spalte2 desc weglasse bekomme ich einen anderen Fehler.

Mal der Quelltext:
Delphi-Quellcode:
QueryPayments.SQL.Text:= 'select * from (';
QueryPayments.SQL.Add('select PAYMENT_DATE, sum(PAYMENT),' + QuotedStr('dummy') + ' as CAPTION,');
QueryPayments.SQL.Add('ID_PAYMENT_TYPE from PAYMENTS where ID_PROCESS in (select ID_PROCESS from PROCESSES where ID_STORE = :IDS)');
QueryPayments.ParamByName('IDS').AsInteger:= Options.StoreID;
if Options.TimeFrom > 0 then
begin
  if (Options.FreeTime) or (not Options.SplitMonth) then
  begin
    QueryPayments.SQL.Add(' and PAYMENT_DATE between :FRO and :TO');
    QueryPayments.SQL.Add(' group by PAYMENT_DATE, ID_PAYMENT_TYPE');
    QueryPayments.SQL.Add(' ) order by PAYMENT_DATE, SUM desc');
    QueryPayments.ParamByName('FRO').AsDate:= Options.TimeFrom;
    QueryPayments.ParamByName('TO').AsDate:= Options.TimeTo;
    QueryPayments.Open;
    SetCSVFileName(Options.TimeFrom,Options.TimeTo);
    WriteMemDataset;
    ExportToCSV(MemDataset,IncludeTrailingPathDelimiter(dm.dBK.Preferences.Common.CSVFolder) + FCSVFileName,';',True,True);
  end
  else
  .
  .
Klammern sind korrekt (soweit ich sehe)... Was kann es noch sein ?

Geändert von haentschman (22. Jul 2012 um 10:58 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: unknown Token DESC

  Alt 22. Jul 2012, 10:54
Auf den ersten Blick scheint die Abfarge so korrekt zu sein. Was passiert, wenn du die Abfarge in einem Admintool absetzt?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:05
Mangels adäquater Datenbank ist das natürlich nur schwer zu testen, aber versucht doch mal SUM(Payment) statt einfach nur SUM oder gib der Summenspalte einen Alias. Da sich das ORDER BY ja nicht direkt auf die SELECT-Anweisung mit dem Aggregat bezieht, könnte der SQL-Interpreter im äußeren SELECT mit dem Wort SUM Probleme bekommen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#4

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:05
Danke für die Anteilnahme

IBExpert:

Delphi-Quellcode:

select PAYMENT_DATE, sum(PAYMENT), 'dummyas CAPTION, ID_PAYMENT_TYPE from PAYMENTS where ID_PROCESS in (select ID_PROCESS from PROCESSES where ID_STORE = 2) group by PAYMENT_DATE, ID_PAYMENT_TYPE
...funktioniert -> Ergebnismenge

Delphi-Quellcode:
select * from(

select PAYMENT_DATE, sum(PAYMENT), 'dummyas CAPTION, ID_PAYMENT_TYPE from PAYMENTS where ID_PROCESS in (select ID_PROCESS from PROCESSES where ID_STORE = 2) group by PAYMENT_DATE, ID_PAYMENT_TYPE

) order by PAYMENT_DATE, SUM desc
Fehler: Token unknown - line 1, column 241.desc.
...wie zu sehen ist, ist da nur ein zusätzliches select drumherum...

Zitat:
aber versucht doch mal SUM(Payment) statt einfach nur SUM
...mit weggelassenem SUM ...) order by PAYMENT_DATE bekomme ich einen Kommandofehler:
Invalid command.
no column name specified for column number 2 in derived table <unnamed>.

Geändert von haentschman (22. Jul 2012 um 11:11 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:19
SUM ist ein reserviertes Wort
Markus Kinzler
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:22
Gib allen Spalten einen Namen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:26
Na klar ! Solange die Ergebnismenge nur "ausgewertet" wird ist der Feldname SUM in der Ergebnismenge "erlaubt". Durch das zusätzliche select wird natürlich der Feldname intern verwendet und kollidiert mit dem reservierten Wort. Ein Alias hat das ganze aufgelöst.
Delphi-Quellcode:

select * from(select PAYMENT_DATE, sum(PAYMENT) as SUMPAYMENT, 'dummyas CAPTION, ID_PAYMENT_TYPE from PAYMENTS where ID_PROCESS in (select ID_PROCESS from PROCESSES where ID_STORE = 2) group by PAYMENT_DATE, ID_PAYMENT_TYPE) order by PAYMENT_DATE, SUMPAYMENT desc
Danke an alle
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:26
Gib allen Spalten einen Namen.
Insebonders den Aggregaten
Markus Kinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:29
Na klar ! Solange die Ergebnismenge nur "ausgewertet" wird ist der Feldname SUM in der Ergebnismenge "erlaubt". Durch das zusätzliche select wird natürlich
Jein. Da du ja keinen vorgegeben hast wird automatisch einer generiert SUM<...>.
In ORDER BY hast du aber SUM als Spaltenname angegeben und hier erwartet der Parser nun das zu summierende Feld in einer Klammer und kann kmit DESC deshalb nichts anfangen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#10

AW: unknown Token DESC

  Alt 22. Jul 2012, 11:33
Zitat:
Da du ja keinen vorgegeben hast wird automatisch einer generiert SUM
...klar. In Anbetracht dessen sollte man sich angewöhnen bei Aggregatfunktionen grundsätzlich einen Alias zu vergeben. Da kann dann so etwas nicht mehr passieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:39 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